JPGRAPH é uma ferramenta extremamente útil para criação de gráficos de uma maneira rápida, fácil e extremamente eficiente.
Além de uma programação sólida e de fácil entendimento, eles distribuem uma documentação completa, explicando passo a passo de como fazer os gráficos.
Este post demostrará como desenvolver a imagem de verificação utilizando esta poderosa ferramenta
Introdução
Gráficos utilizando JPGRAPH:
Dentre outros que nesse momento não nos importará no momento.
Imagens de Segurança
Em alguns cadastros críticos como fale conosco ou suporte técnico, ou até mesmo cadastrar usuários, temos que ter certeza de que quem esta fazendo o cadastro é uma pessoa, e não algum script a fim de prejudicar seu sistema.
Para isso não ocorrer, ou evitar ao máximo, utilizamos um componente de verificação de caracteres em imagem, ou seja a pessoa deve digitar exatamente os caracteres que estão na imagem, em um input box destinado.
Como disse, o JPGRAPH possui uma funcionalidade que cria essas imagens de um modo fácil sem muita programação.
Por motivos de confusão o JPGRAPH não usa nem a letra “O” nem o número “0″, pois podem ser confudidos.
Iniciando o desenvolvimento
Obviamente é necessário que seja feito o download do componente JPGRAPH para a versão do seu PHP, de preferência a maior versão estável pelo link (Download JPGRAPH).
Feito isso, é necessário colocá-lo na pasta do seu projeto, inicialmente, depois se for melhor para você, pode ser colocado em algum lugar comum para todos seus projetos, ai não é necessário copiar para cada projeto o JPGRAPH.
Iniciando o SPAM CHALLANGE.
Para iniciá-lo você pode incluir somente a biblioteca que a funcionalidade for usar:
require_once “path/to/jpgraph/src/jpgraph_antispam.php”;
Feito isso a classe AntiSpam já estará disponível para seu sistema.
Normalmente por questões de segurança, não guardaremos os caracteres gerados em um campo hidden, iremos gravá-lo em uma sessão, assim ficará acessível à toda a aplicação e ficará dificil de ser quebrada.
Existem 2 tipos de gerar os caracteres de segurança:
Utilizando a propriedade rand($valor)
Utilizando a propriedade set($valor)
rand($valor)
A propriedade rand faz com que sejam gerados caracteres aleatórios na quantidade que foi passado por parâmetro, excluindo o “O” e o “0″, evitando a confução, retornando em uma variável.
set($valor)
A propriedade set faz com que o sistema de segurança coloque exatamente os caracteres que você estipulou, mas neste caso se você digitar um “O” ou um “0″ a imagem não irá aparecer para evitar as confusões, e além é claro de não aceitar caracteres com acento.
Como ficaria o código
{imagemSeguranca.php} Utilizando o rand
require_once "path/to/jpgraph/src/jpgraph_antispam.php";
$spam = new AntiSpam();
$str = $spam->rand(6);
$_SESSION['caracteres'] = base64_encode($str);
$spam->stroke();
?>
Feito isso você pode criar uma página HTML chamando o seguinte:

Retornará pra você a seguinte imagem:
{imagemSeguranca.php} Utilizando o set
require_once "path/to/jpgraph/src/jpgraph_antispam.php";
$spam = new AntiSpam();
$str = $spam->set(‘Fabrica’);
$_SESSION['caracteres'] = base64_encode($str);
$spam->stroke();
?>
Feito isso você pode criar uma página HTML chamando o seguinte:

Retornará pra você a seguinte imagem:
Como foi gravado como base64_encode o caractere da sessão, quando você fizer o POST, basta só fazer isso em qualquer uma das opções escolhidas:
// seu codigo acima….
if($_POST){
if(base64_encode($_POST['digitacao']) == $_SESSION['caracteres']){
// Passou , então faz o cadastro
}else{
// Digitou alguma coisa errado, exibe erro
}
}
Agora é só otimizar seus cadastros com esse novo aprendizado que aqueles spams chatos dificilmente voltarão!
Fonte: http://my.opera.com/artigos/blog/show.dml/2607180