• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

BornKillaz

Validar NIB e NIF

11 mensagens neste tópico

Olá a todos!

Alguem tem já desenvolvida alguma função em PHP que faça a validação do NIF e do NIB?

Para o NIB encontrei uma em C++, mas não percebo nada de C++  :)

 String^ Nib = pNib;
    String^ sCheckDigit = Nib->Substring(19,2);

    int ResultadoMultiplicacao = 0;

    int Contador=0;
    int digito;


    try 
    {
    for (Contador = 0; Contador < 19; Contador++)
    {
        digito = ::Convert::ToInt32(Nib->Substring(Contador, 1));
        ResultadoMultiplicacao = ((ResultadoMultiplicacao + digito) * 10) % 97;
    }

    ResultadoMultiplicacao = 98 - ((ResultadoMultiplicacao * 10) % 97);

    String^ sResultado = ResultadoMultiplicacao.ToString();

    if (ResultadoMultiplicacao < 10)
        sResultado = "0" + sResultado;


    if (!(sResultado == sCheckDigit))
    {
        return false;
    }
    else
        {
            return true;
        }
    }
    catch( ::System::Exception^ e)
    {
        return false;
    }

E para o NIF encontrei um snippet em PHP aqui no fórum, mas esse aceita dois campos de input e eu só quero aceitar um.

	$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)";			
	}

No entanto este pedaço de código parece que foi desenvolvido mais para validar números de BI's.

Se alguem me pudesse ajudar agradecia.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não me parece. Preciso de uma coisa fiável, e JavaScript qualquer um pode contornar a validação.

No entanto se tiveres funções para as validações pretendidas em JavaScript e quiseres partilhar, eu faço a conversão para PHP.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Antes de mais, sabes quais são as regras que a validação do NIF deve obedecer?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Antes de mais, sabes quais são as regras que a validação do NIF deve obedecer?

Não, e tu sabes?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, e tu sabes?

Sei, fiz até hoje um artigo sobre isso, no meu blog encontrarás mais informação, mas essencialmente é:

  • O NIF tem que ter 9 dígitos
  • O primeiro dígito tem que ser 1, 2, 5, 6, 8 ou 9
  • A soma de controle dada por 9xd1+8xd2+7xd3+6xd4+5xd5+4xd6+3xd7+2xd8+d9 tem que ser múltipla de 11 (congruente com o módulo 11, isto é, dê resto 0 quando dividida por 11). d1 é o dígito mais à esquerda, e d9 o digito mais à direita (digito de controle).
  • d9, em alguns casos, precisava de ter o valor 10, para que a soma de controle fosse divisível por 11. Neste caso d9 tomará o valor 0. Nitidamente uma decisão mal tomada, pois um dígito de controle igual a zero, poderá significar uma soma de controle correcta ou uma cujo resto da divisão por onze dá 1.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sei, fiz até hoje um artigo sobre isso, no meu blog encontrarás mais informação, mas essencialmente é:

  • O NIF tem que ter 9 dígitos
  • O primeiro dígito tem que ser 1, 2, 5, 6, 8 ou 9
  • A soma de controle dada por 9xd1+8xd2+7xd3+6xd4+5xd5+4xd6+3xd7+2xd8+d9 tem que ser múltipla de 11 (congruente com o módulo 11, isto é, dê resto 0 quando dividida por 11). d1 é o dígito mais à esquerda, e d9 o digito mais à direita (digito de controle).
  • d9, em alguns casos, precisava de ter o valor 10, para que a soma de controle fosse divisível por 11. Neste caso d9 tomará o valor 0. Nitidamente uma decisão mal tomada, pois um dígito de controle igual a zero, poderá significar uma soma de controle correcta ou uma cujo resto da divisão por onze dá 1.

Isso é exactamente igual ao caso do bi.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é exactamente igual ao caso do bi.

O do BI é um pouco diferente, é:

Tomemos o número 8074662-4 como exemplo, e onde o último 4 é o digito de controle.


  • Para verificar se o número é válido, multiplica-se o último algarismo por 1 (4x1), o penúltimo algarismo por 2 (2x2), o antepenúltimo por 3 (6x3), e assim sucessivamente. Somando no final todos estes produtos, obtém-se 176.
    [(4x1) + (2x2) + (6x3) + (6x4) + (4x5) + (7x6) + (0x7) + (8x8) = 176]
  • Divide-se este resultado por 11 e chega-se a um número que deverá ser inteiro
    [176 : 11 = 16].
  • Se o resultado dessa divisão por 11 não der número inteiro, isso significa que o vosso B.I. é falso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pcrocura aqui mesmo por um tal canivete suiço digital, ferramenta em vb que tem isso tudo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora