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




8 comentários:
[...] 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 [...]
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
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.
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.
Eu precisava do código de validação do ISBN de livros. Será que alguém me pode ajudar? Contacto por email. “[email protected]”
Cumprimentos
Paulo Alexandre, tens o código em C e Python acima…
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
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]