Maracujá!

Sítio web pessoal de António Manuel Dias

Validação de cartões

Número de Contribuinte (NIF), Bilhete de Identidade, Número de Identificação na Segurança Social (NISS), NIB, IBAN (Portugal), Cartões de Crédito e ISBN

Versão 0.17, 2009/Nov.10

Após um post de Ricardo Pereira no pt.comp.programacao fiquei a saber umas coisas acerca dos mecanismos de validação dos números de contribuinte, números do bilhete de identidade e números de identificação bancária. O principal responsável por esse meu novo conhecimento assina sob o nick _kk_ e fez o post das rotinas de validação do NIF e NIB, em VB. Também contribuíram B.Baixo e o livro do Jorge Buescu O Mistério do Bilhete de Identidade e Outras Histórias.

Uma mensagem de Filipe Polido levou-me ao conhecimento de um site com o algoritmo de validação dos números de cartão de crédito.

Uma mensagem de Luís Sá serviu para me informar que existe um novo Número de Identificação da Segurança Social. O algoritmo para a sua verificação foi-me facultado pelo IIES. Podes consultar aqui a descrição do algoritmo em PDF.

Para resumir o que fiquei a saber e passar o conhecimento a quem dele necessitar, resolvi publicar neste site as funções que permitem fazer a validação dos números referidos.

  • Ver o código em C
  • Ver o código em Python
  • Ver código de validação do número de contribuinte em VC++ .NET e VB .NET, contribuição de Nuno Anes.
  • Ver código de validação do número de contribuinte, BI e NISS em Delphi / Kylix, contribuição de Fernando Carvalho.
  • Ver o código de validação do número de contribuinte em T-SQL, contribuição de Luís Pisco, ADJ3 sistemas Lda e António Santos.
  • Ver o código de validação do número de contribuinte em PL-SQL, contribuição de António Oliveira Santos.
  • Ver o código de validação do IBAN e NIF em SQL, contribuição de Paulo Martins.
  • Ver o código de validação do número de contribuinte, NIB e cartões de crédito em VBA, contribuição de João Santos.
  • Ver o código de validação do NISS em Visual Basic, contribuição de Pedro Moutinho.

Facebook

Comentar (RSS)  |  Trackback

8 comentários:

Em 11 de Dezembro de 2009 às 23:11, [Durão's Blog - ~/me@Online]$ » Piadinha… escreveu:

[…] tudo isso, agora que olho bem para isto, reparo que o check digit de validação do algoritmo do NIB da conta coincide exactamente com o número do […]


Em 26 de Março de 2010 às 10:53, Paulo Martins escreveu:

Olá António,

Foi recentemente alterado o algoritmo do IBAN
(o algoritmo antigo indica como inválidos alguns NIBs novos).

No site das Nações Unidas abaixo encontra-se o algoritmo para
a validação dos NIBs de vários países incluindo Portugal.

http://www.tbg5-finance.org/?ibandocs.shtml/

Abraço
Paulo


Em 26 de Março de 2010 às 20:01, António escreveu:

Obrigado, Paulo. O código está uma grande confusão (e javascript não é a minha linguagem), mas vou tentar perceber e alterar os programas aqui em conformidade.


Em 20 de Setembro de 2010 às 11:33, Pedro Moutinho escreveu:

Class para validação NISS (Número de Identificação na Segurança Social) em Visual Basic

(…) -> editado pelo administrador: o código está já disponível na página acima.


Em 14 de Janeiro de 2011 às 18:17, Paulo Alexandre escreveu:

Eu precisava do código de validação do ISBN de livros. Será que alguém me pode ajudar? Contacto por email. “xano_2009@hotmail.com”

Cumprimentos


Em 14 de Janeiro de 2011 às 19:13, António escreveu:

Paulo Alexandre, tens o código em C e Python acima…


    Em 14 de Outubro de 2011 às 12:44, Tonecas escreveu:

    as implementações dos algoritmos de validação do BI estão na maioria incorrectas…

    1) um BI pode ter menos de 7 caracteres. deve ser sempre feito o pad de 0 até o tamanho do BI ser 8
    2) o checkdigit nao pode ser incluido na fórmula de cálculo “bi[i] * (9-i)”
    3) o valor do cálculo (checkdigit) se for maior ou igual a 10 deve ser reposto a 0
    4) um bi é válido se o checkdigit for igual ao valor calculado


      Em 16 de Outubro de 2011 às 23:53, António escreveu:

      Tonecas:
      Dizes que a maior parte das implementações dos algoritmos de validação do BI estão incorrectas, o que quer dizer que provavelmente as saberias corrigir. Se o tivesses feito e enviado a correcção terias honrado o espírito de todas as pessoas que contribuíram com o código, partilhando também o teu conhecimento como nós partilhámos o nosso. Para além disso não dizes sequer quais as implementações que estão erradas (a “maioria“) nem quais os erros que contêm, tornando impossível a sua detecção e correcção.

      A menos que os erros sejam os comentários que colocaste de seguida. Quanto a esses, e apenas no que diz respeito ao código que escrevi — as implementações em C e Python — aqui vão os meus comentários:

      1) um BI pode ter menos de 7 caracteres. deve ser sempre feito o pad de 0 até o tamanho do BI ser 8
      Como os números de BI que conheço têm apenas 7 ou 8 dígitos, pensei que esses fossem os únicos casos, mas talvez isso se deva aos participantes na discussão abordada no artigo. Já agora, sabes qual o número mínimo de dígitos?

      2) o checkdigit nao pode ser incluido na fórmula de cálculo “bi[i] * (9-i)”
      Foi essa a forma de cálculo que usei.

      3) o valor do cálculo (checkdigit) se for maior ou igual a 10 deve ser reposto a 0
      O valor de cálculo nunca pode ser maior que 10, já que é o resto de uma divisão inteira por 11. E só é reposto a zero quando é igual a 10 devido a um erro de implementação do algoritmo em Portugal, que destrói na prática a sua utilidade sempre que o dígito de controlo é zero. De qualquer forma, também foi assim que o implementei nas minhas funções.

      4) um bi é válido se o checkdigit for igual ao valor calculado
      Precisamente. É assim que estão construídas as funções no código que implementei.


[Fonte RSS dos comentários a este artigo]

Comentar:

HTML permitido: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*