Número de Identificação Bancária

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

O Número de Identificação Bancária (NIB) é um elemento de informação normalizado, utilizado na identificação de contas bancárias domiciliadas em Portugal e que permite uma maior segurança e rapidez no encaminhamento na transferência a crédito de fundos.

Formato NIB[editar | editar código-fonte]

O NIB é composto por 21 algarismos, sendo os 4 primeiros o código do banco no qual a conta está domiciliada, seguidos do código do balcão ou agência (4 algarismos, que poderão ser zeros se o banco não utilizar esta referência), do número de conta (11 algarismos) e de dois algarismos de controlo[1] .

Formato[editar | editar código-fonte]

BBBB AAAA CCCC CCCC CCC KK

Onde:

Alguns códigos de bancos usados no NIB[2] [3]

Verificação do NIB[editar | editar código-fonte]

Algoritmo[editar | editar código-fonte]

Tabela de transformação de caracteres
Caracter Número correspondente
0 0
1, A, J 1
2, B, K, S 2
3, C, L, T 3
4, D, M, U 4
5, E, N, V 5
6, F, O, W 6
7, G, P, X 7
8, H, Q, Y 8
9, I, R, Z 9

A validade de um NIB pode ser calculada através do seu algarismo de controlo.

A primeira etapa consiste em substituir os algarismos por letras.

Para realizar a transformação, basta colocar em base 36 (base 10 + 26 letras) e aplicar o cálculo seguinte a cada caracter (transformado em número currentCharValue) e depois substitui-lo pelo número resultante:


currentCharValue + 2^{\frac{currentCharValue-10}9}\pmod{10}

A etapa seguinte (facultativa) consiste em decompor o código e multiplicar cada parte por uma constante e somar. Finalmente, o código está correcto se o número obtido (quer pela concatenação, quer pela decomposição) corresponde a 0 módulo 97.


bankCode * 89 + counter * 15 + account * 3 + key \equiv 0 \pmod{97}

Algoritmo de verificação em C#[editar | editar código-fonte]

        public bool NibIsValid(string nib)
        {
            Regex nibRegex = new Regex(@"^\d{21}$", RegexOptions.Compiled);
            if (String.IsNullOrEmpty(nib) || !nibRegex.IsMatch(nib))
                return false;
            var result = 0;
            for (int nibIndex = 0; nibIndex < 19; nibIndex++)
            {
                result += Convert.ToInt32(nib[nibIndex].ToString(CultureInfo.InvariantCulture));
                result *= 10;
                result %= 97;
            }
            result = 98 - ((result * 10) % 97);
            return nib.Substring(19).Equals(result.ToString("00"));
        }

Algoritmo de verificação em PHP[editar | editar código-fonte]

A função check_rib devolve verdade ou falso conforme o número seja ou não válido.

function check_rib($cbanque, $cguichet, $nocompte, $clerib) {
    $tabcompte = "";
    $len = strlen($nocompte);
    if ($len != 11) {
        return false;
    }
    for ($i = 0; $i < $len; $i++) {
        $car = substr($nocompte, $i, 1);
        if (!is_numeric($car)) {
            $c = ord($car) - (ord('A') - 1);
            $b = ($c + pow(2, ($c - 10)/9)) % 10;
            $tabcompte .= $b;
        }
        else {
            $tabcompte .= $car;
        }
    }
    $int = $cbanque . $cguichet . $tabcompte . $clerib;
    return (strlen($int) >= 21 && bcmod($int, 97) == 0);
}

Algoritmo de verificação em Java[editar | editar código-fonte]

import java.math.BigDecimal;
 
public class Validation{
    public boolean checkRib(String rib) {
        StringBuilder extendedRib = new StringBuilder(rib.length());
        for (char currentChar : rib.toCharArray()) {
            //Works on base 36
            int currentCharValue = Character.digit(currentChar, Character.MAX_RADIX);
            //Convert character to simple digit
            extendedRib.append(currentCharValue<10?currentCharValue:(currentCharValue + (int) StrictMath.pow(2,(currentCharValue-10)/9))%10);
        }
 
        return new BigDecimal(extendedRib.toString()).remainder(new BigDecimal(97)).intValue() == 0;
    }
}

Algoritmo de validação do check digit em Java[editar | editar código-fonte]

O anterior parecia não funcionar, recebe um nib, e valida o check digit desse nib

    public static boolean isValidNIB(String nib) {
        char[] toValidate = nib.substring(0, 19).toCharArray();
        Integer checkDigit = Integer.valueOf(nib.substring(19));
        Integer[] wi = { 73, 17, 89, 38, 62, 45, 53, 15, 50, 5, 49, 34, 81, 76, 27, 90, 9, 30, 3 };
        Integer sum = 0;
        for (int i = 0; i < 19; i++) {
            sum += Character.digit(toValidate[i], 10) * wi[i];
        }
        return checkDigit.equals(98 - (sum % 97));
    }

Algoritmo em JavaScript para através do número de conta obter o NIB[editar | editar código-fonte]

Este algoritmo serve para obter através do número de conta, o NIB. Faz uso das considerações técnicas acima referidas, mais precisamente o algoritmo para o cálculo dos dois algarismos de controlo. Este algoritmo faz ainda uso da classe BigInt para JavaScript, pois sendo o NIB um número com 21 algarismos não permite que a classe convencional de inteiros em JavaScript lide com o NIB. No algoritmo abaixo indicado toma-se como exemplo o caso em que o banco é a CGD (código 0035).

if (banco == "CGD"){
 
	banco_num=str2bigInt('0035',10,6,21);
	NIB_aux=mult(banco_num,str2bigInt('100000000000000000',10,6,21));
 
	str_conta_banco = document.conta_banco.conta.value; //número de conta
 
	if(isNaN(str_conta_banco) || str_conta_banco.length!=13){ //validação do número de conta CGD
		alert("Número de conta CGD inválido");
		return;
	}
 
	var conta_num = str2bigInt(str_conta_banco,10,6,21); //conversão da string em BigInt
 
	var conta_sem_balcao = mod(conta_num,str2bigInt('1000000000',10,6,21)); //número de conta(sem o número do balcão)
	var balcao = sub(conta_num,conta_sem_balcao);//código do balcão com 9 zeros
 
	conta_sem_balcao = mult(conta_sem_balcao,str2bigInt('100',10,6,21));//código do balcão para adicionar ao NIB
 
	balcao = mult(balcao,str2bigInt('10000',10,6,21));//código do balcão com 13 zeros (correcto)
 
	NIB_aux=add(NIB_aux,add(balcao,conta_sem_balcao));//cód. banco + cód. balcão + conta_sem_balcão
 
	NIB_ref=sub(str2bigInt('98',10,6,21),mod(NIB_aux,str2bigInt('97',10,6,21))); //faz 98-(NIB(com os algarismos de controlo a 00) módulo 97) para obter os algarismos de controlo
 
	NIB=add(NIB_aux,NIB_ref); //soma os algarismos de controlo ao NIB calculado 
	NIB_str="00"+bigInt2str(NIB,10);// soma dois zeros à string pois o código da CGD é apenas 35
 
	document.write("<center>O seu NIB &eacute;: "+NIB_str+"<br></br></center>");//imprime o NIB
 
	return;
}

Validação em RUBY[editar | editar código-fonte]

  #Validates a NIB (Número de Identificação Bancaria)
  def validate_nib(nib)
 
 
    #puts nib
    toValidate = nib.slice(0..18)
    #puts toValidate
    checkDigit = nib.slice(19..20).to_i
    #puts checkDigit.to_s
    wi = [73, 17, 89, 38, 62, 45, 53, 15, 50, 5, 49, 34, 81, 76, 27, 90, 9, 30, 3]
    sum = 0
    (0..18).each do |i|
      digit = nib.slice(i).to_i
      sum = sum + digit * wi[i];
 
    end
    partial = sum % 97
    controlCheckDigit = 98 - partial;
    return checkDigit == controlCheckDigit
 
  end

IBAN[editar | editar código-fonte]

O IBAN, é um número utilizado para transacções internacionais. É composto pelo Número de Identificação Bancária, pelo código do país e por dois dígitos que servem de controlo[4] . O IBAN deve ser sempre apresentado para leitura em maiúsculas e em grupos de quatro dígitos separados por espaço.[5]

Em Portugal, para converter um NIB em IBAN basta acrescentar "PT50" antes do NIB. Exemplo: PT50 BBBB AAAA CCCC CCCC CCCK K

Referências

  1. O que é o NIB e o IBAN? (em português) Millennium BCP. Visitado em 13 de Setembro de 2014. Cópia arquivada em 11 de Setembro de 2014.
  2. XI. TABELA DE BANCOS (em português) Banco de Portugal (2001). Visitado em 13 de Setembro de 2014.
  3. Anexo à Instrução nº 1/96
  4. Instrumentos de Pagamento - IBAN (em português) Banco de Portugal. Visitado em 13 de Setembro de 2014. Cópia arquivada em 12 de Setembro de 2014.
  5. CIRCULAR Nº 3.625 (em português) Banco Central do Brasil (14 de Fevereiro de 2013). Visitado em 13 de Setembro de 2014.

Ligações externas[editar | editar código-fonte]

Aplicação online para obter o NIB através do número da conta

Bibliografia[editar | editar código-fonte]

Ícone de esboço Este artigo sobre um banco ou instituição financeira é um esboço. Você pode ajudar a Wikipédia expandindo-o.