=============================================================
Partcipe das enquetes sobre os novos rumos da comunidade!
Acesse http://www.pgfoundry.org:8080/novosRumos
=============================================================
Você percebeu que foram criados tipos, funções e operadores para ISSN
e ISBN com a instalação deste módulo do contrib?
Se você modelar a tabela especificando o campo como sendo do tipo
"isbn", essa checagem já deve estar embutida. Veja a definição do tipo
de dado:
CREATE TYPE isbn (
INTERNALLENGTH = 16,
EXTERNALLENGTH = 13,
INPUT = isbn_in,
OUTPUT = isbn_out
);
COMMENT ON TYPE isbn IS 'International Standard Book Number';
Mas se você quiser somente uma função para a validação, vá até os
fontes, e crie uma função em C baseada no seguinte trecho de código:
/*
* ISBN reader.
*/
isbn * isbn_in(char *str)
{
isbn *result;
if (strlen(str) != 13)
{
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("invalid ISBN: \"%s\"", str),
errdetail("incorrect length")));
return (NULL);
}
if (isbn_sum(str) != 0)
{
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("invalid ISBN: \"%s\"", str),
errdetail("failed checksum")));
return (NULL);
}
result = (isbn *) palloc(sizeof(isbn));
strncpy(result->num, str, 13);
memset(result->pad, ' ', 3);
return (result);
}
/*
* The ISBN checksum is defined as follows:
*
* Number the digits from 1 to 9 (call this N).
* Compute the sum, S, of N * D_N.
* The check digit, C, is the value which satisfies the equation
* S + 10*C === 0 (mod 11)
* The value 10 for C is written as `X'.
*
* For our purposes, we want the complete sum including the check
* digit; if this is zero, then the checksum passed. We also check
* the syntactic validity if the provided string, and return 12
* if any errors are found.
*/
--
Rodrigo Hjort
http://icewall.org/~hjort
2006/7/5, Osni Souza <[EMAIL PROTECTED]>:
> Preciso usar dado para ISBN, instalei as funções para ISBN e ISSN. Porém não
> sei como faço para verificar no banco se o ISBN é valido.
>
> Alguém tem uma informação para me ajudar..
>
> Obrigado
>
> Osni Jr
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/