Ir para conteúdo


Revista PROGRAMAR - Edição 45 (Maio 2014): Download já disponível! Visita também o novo website da revista.

- - - - -

[PHP] Validar BI e NIF

php

  • Por favor inicie sessão para responder
38 respostas a este tópico

#1 Drone

Drone

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 471 mensagens

Publicado 23 de Maio de 2007 - 22:59

Bem fiz este script já a algum bom tempo para um site que fiz!... penso que seja util deixo aqui para voces usarem Imagem Colocada

Na altura tinha feito só para detectar o BI qualquer das maneiras tive a ler hoje uma pagina sobre isto (por isso que me lembrei deste script e decidir colocar aqui) e dizem que este calculo também serve para o NIF, eu exprimentei com o meu e deu lol.

Bem fica aqui uma demo: http://upgaming-hq.com/drone/bi.php

EDIT: atenção a 2ª caixa de texto é para introduzir o algarismo que se encontra ao lado do número de BI (aquele algarismo que por muitos é conhecido pelo número de pessoas que tem o mesmo nome que o nosso, mas não não é.. serve mesmo para verificação).
EDIT 2: Para testar com o NIF introduzem os 8 primeiros algarismos na 1ª box e o ultimo na 2ª.

Código (PHP):
<form action="" method="POST" enctype="multipart/form-data" name="form1">
        <input type="text" name="bi" maxlength="8" size="10" />
        <input type="text" name="bi2" maxlength="1" size="2" />
        <input type="submit" name="submit" />
</form>
<?
        if ($_POST) {
                $nr_bi = $_POST['bi'];
       
                while (strlen($nr_bi) < 8) {
                        $nr_bi = "0" . $nr_bi;
                }
       
                $nr_bi .= $_POST['bi2'];
               
                echo $nr_bi;
               
                $calc = 9 * $nr_bi[0] + 8 * $nr_bi[1] + 7 * $nr_bi[2] + 6 * $nr_bi[3] + 5 * $nr_bi[4] + 4 * $nr_bi[5] + 3 * $nr_bi[6] + 2 * $nr_bi[7] + $nr_bi[8];
                $calc = $calc % 11;
               
                if ((int)$calc == 0) {
                        echo " (verdadeiro)";
                } else {
                        echo " (falso)";                       
                }
        }
       
?>


#2 Hipnoted

Hipnoted

    Stack Overflow

  • Membro
  • PipPipPipPipPipPipPip
  • 5748 mensagens

Publicado 23 de Maio de 2007 - 23:08

Sim senhor... Eu testei e também deu comigo. Antes tinha testado com o meu último número, alterei-o para 2 em vez de 3 e deu que estava errada. :thumbsup:

Não conhecia era a forma de calcular isso.

#3 samuca

samuca

    Boolean User

  • Membro
  • PipPipPip
  • 101 mensagens

Publicado 29 de Maio de 2007 - 00:01

Também testei o meu BI e NIF e deu, depois inseri um numero à sorte e não deu

Muito bom, sim sr

#4 psiico

psiico

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1214 mensagens

Publicado 30 de Maio de 2007 - 03:20

inseri os dados correctos e nao deu... será que sou fake?(ja nao é o 1º sistema que m diz isso)

#5 Gurzi

Gurzi

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 2579 mensagens

Publicado 30 de Maio de 2007 - 03:24

Ver Mensagempsiico, em 30 de Maio de 2007 - 03:20, disse:

inseri os dados correctos e nao deu... será que sou fake?(ja nao é o 1º sistema que m diz isso)

Deixa-me adivinhar, tens um 0 no final , naquele quadradinho único certo ???

Quem implementou isso em Portugal foi um matemático, mas o senhor enganou-se nos cálculos, anda aí um tópico por aí.

edit :

http://www.mat.uc.pt/~picado/SistIdent/mistBI.html

Boa Leitura!  :P

#6 psiico

psiico

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1214 mensagens

Publicado 30 de Maio de 2007 - 03:27

tenho xD LOL!

pois,enganou-se e eu que m lixe XD

#7 Gurzi

Gurzi

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 2579 mensagens

Publicado 30 de Maio de 2007 - 03:32

Ver Mensagempsiico, em 30 de Maio de 2007 - 03:27, disse:

tenho xD LOL!

pois,enganou-se e eu que m lixe XD

Deves ter crescido assim como eu a pensar " não há ninguem com o meu nome " LOL

cá em casa toda a gente defende a teoria do " ah, eu tenho x pessoas com o meu nome"

Mas nunca ninguem se lembrou de pensar que todos os dias nascem pessoas ? ou seja, enquanto não renovares o teu BI vai existir sempre o mesmo numero de pessoas com o mesmo nome, ROFTLOL!

#8 psiico

psiico

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1214 mensagens

Publicado 30 de Maio de 2007 - 11:09

claro k nascem e têm nomes igual obvio! so k eu como nao sabia o k era, e eu perguntei e disseram que era das pessoas com o nº igual, eu mais pikeno, comi XD

#9 Triton

Triton

    Stack Overflow

  • Membro
  • PipPipPipPipPipPipPip
  • 8490 mensagens

Publicado 30 de Maio de 2007 - 11:14

Ver MensagemGurzi, em 30 de Maio de 2007 - 03:32, disse:

Ver Mensagempsiico, em 30 de Maio de 2007 - 03:27, disse:

tenho xD LOL!

pois,enganou-se e eu que m lixe XD

Deves ter crescido assim como eu a pensar " não há ninguem com o meu nome " LOL

cá em casa toda a gente defende a teoria do " ah, eu tenho x pessoas com o meu nome"

Mas nunca ninguem se lembrou de pensar que todos os dias nascem pessoas ? ou seja, enquanto não renovares o teu BI vai existir sempre o mesmo numero de pessoas com o mesmo nome, ROFTLOL!


ROTFLOL. :-[

#10 psiico

psiico

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1214 mensagens

Publicado 30 de Maio de 2007 - 12:02

nunca percebi a cena do ROTFLOL... "lol" nao xega?:S

#11 djthyrax

djthyrax

    Stack Overflow

  • Moderador
  • PipPipPipPipPipPipPip
  • 15513 mensagens

Publicado 30 de Maio de 2007 - 14:19

Ver Mensagempsiico, em 30 de Maio de 2007 - 12:02, disse:

nunca percebi a cena do ROTFLOL... "lol" nao xega?:S
não. ROTFLOL = roll(ing) on the floor laughing out loud

#12 psiico

psiico

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1214 mensagens

Publicado 31 de Maio de 2007 - 03:13

sempre a aprender :D

#13 Drone

Drone

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 471 mensagens

Publicado 31 de Maio de 2007 - 11:39

Hummm eu acho que se o numero de confirmação for 0 e eu substitui-lo por 10 acho que fica a funcionar, (por 10 ou por 1)

quem tiver o numero de confirmação 0 exprimente fazer esta conta à manapula:

9 * 1º + 8 * 2º + 7 * 3º + 6 * 4º + 5 * 5º + 4 * 6º + 3 * 7º + 2 * 8º + nr_de_confirmacao (aqui colocam 10 ou 1)

#14 santos1948

santos1948

    null

  • Membro
  • Pip
  • 27 mensagens

Publicado 31 de Maio de 2007 - 21:55

Drone:
Como é sabido o número de controlo do BI quando é 0, pode de facto ser o 10. Isto acontece grosso modo em 50% dos casos.
No entanto essa correcção já foi introduzida no programa. Acho por isso estranho o que acontece com o BI do Psiico: se calhar no caso dele, o manga de alpaca que lhe tratou do BI, não seguiu o algoritmo oficial e por isso o número é manhoso.

#15 psiico

psiico

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1214 mensagens

Publicado 03 de Junho de 2007 - 13:23

Ver Mensagemsantos1948, em 31 de Maio de 2007 - 21:55, disse:

Drone:
Como é sabido o número de controlo do BI quando é 0, pode de facto ser o 10. Isto acontece grosso modo em 50% dos casos.
No entanto essa correcção já foi introduzida no programa. Acho por isso estranho o que acontece com o BI do Psiico: se calhar no caso dele, o manga de alpaca que lhe tratou do BI, não seguiu o algoritmo oficial e por isso o número é manhoso.

porque é que tenho sempre coisas manhosas?? porra! kerem-me é tirar a nacionalidade portuguesa!!!!!!!!! XD ;)

#16 trepatudo

trepatudo

    null

  • Novo Membro
  • Pip
  • 7 mensagens

Publicado 04 de Julho de 2007 - 22:24

Bom script muito util!

#17 Drone

Drone

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 471 mensagens

Publicado 05 de Julho de 2007 - 11:10

trepatudo da margem sul?

#18 pedrotuga

pedrotuga

    Stack Overflow

  • Membro
  • PipPipPipPipPipPipPip
  • 7517 mensagens

Publicado 05 de Julho de 2007 - 12:35

Bem.... par acabar com os fantasmas até porque mesmo neste tópico já se disse muita coisa falsa, aqui vai a explicação, mas primeiro vamos aos fantasmas:

1. Esse algarismo não indica o numero de pessoas com o mesmo nome. Essa afirmação é falsa e não tem qualquer fundamento.
2. Isso não foi "inventado por um matemático" que praí anda nem nada diiso, é a simples aplicaçao de um sistema de controlo, bem simples por sinal, de erros tal como é feito nos numeros de contas bancarias, ISBN, numeros de controlo de stoks, etc etc
3.Ninguem se "enganou nos cálculos" como foi dito por aí.

Agora a explicação:
Esse digito é usado numa implementação do algoritmo de controlo de erros que o drone usou. A implementação dele é um exemplo de quao simples o sistema é.
Agora, onde este sistema falha é no seguinte:
Esse digito corresponde ao resto da divisao por 11 da soma pesada de cada algarismo do numero. A razão por ser 11 é porque este tipo de algoritmo requere que a divisao final seja por um nuero primo para evitar ambiguidades com submultiplos. Escolheu-se o 11 porque era proximo de de 10 ( que é o numero de algarismos que existem na base de 10 ) e porque permitia, dado o comprimento do numero do BI, indicar falhas em qualquer algarismo ou na troca de dois adjacentes. Quando maior for o número escolhido, mais erros se controlam, 11 era a escolha indicada neste caso. Ora, a divisão inteira por 11 pode ter como resto 11 valores diferentes:
0,1,2,....,10
Na altura, como ainda se usavam máquinas de escrever e outros equipamentos relativamente limitativos alguem teve a brilhante ( brilhantemente estúpida ) ideia:
"ah... nao faz mal... quando o resto for 10 poe-se tambem um zero para não ter que estar  a por uma letra"
Moral da historia, se um BI um zero nesse quadradito não se sabe se esse zero corresponde a zero ou a 10. Então não se pode tirar nenhuma conclusão em relação a se o numero está correcto ou não. Isto pode nao parecer muito grave, mas um sistema destes funcionar só para alguns casos é o mesmo que não funcionar, ou seja, não se pode confiar neste sistema de qualquer das formas, por isso esse numero não serve para nada.
Actualmente acho que nao atriuem BIs com numero cujo digito de controlo seja um zero, mas... e os que já têm um zero?

#19 Drone

Drone

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 471 mensagens

Publicado 03 de Agosto de 2007 - 21:44

Gracias  ;)

#20 Sven

Sven

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 486 mensagens

Publicado 06 de Agosto de 2007 - 20:09

devia-se alterar o titulo deste tópico de Detectar para Validar

é mais correcto