=============================================================
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/

Responder a