Número de Identificação Bancária

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

Formato NIB

O NIB era 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

BBBB AAAA CCCC CCCC CCC KK

Onde:

Alguns códigos de bancos usados no NIB[2][3]
  • 0007 - Novo Banco
  • 0010 - BPI
  • 0018 - Santander
  • 0019 - BBVA
  • 0023 - Activo Bank
  • 0025 - Caixa BI
  • 0032 - Barclays (é Bankinter com 0032 desde a mudança de marca)
  • 0033 - Millennium BCP
  • 0034 - BNP Paribas
  • 0035 - CGD

Verificação do NIB

Algoritmo

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 as por letras por números.

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 substituí-lo pelo número resultante:

c u r r e n t C h a r V a l u e + 2 c u r r e n t C h a r V a l u e 10 9 ( mod 10 ) {\displaystyle 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.

b a n k C o d e 89 + c o u n t e r 15 + a c c o u n t 3 + k e y 0 ( mod 97 ) {\displaystyle bankCode*89+counter*15+account*3+key\equiv 0{\pmod {97}}}

Algoritmo de verificação em C#

public bool NibIsValid(string nib)
{
    Regex nibRegex = new Regex(@"^\d{21}$", RegexOptions.Compiled);
    long result = 0;

    for (int nibIndex = 0; nibIndex < 19; nibIndex++)
    {
        int digit = Convert.ToInt32(nib[nibIndex].ToString(CultureInfo.InvariantCulture));
        result = (result + digit) * 10 % 97;
    }
    
    result = 98 - ((result * 10) % 97);
    return nib.Substring(19).Equals(result.ToString("00"));
}

Algoritmo de verificação em PHP

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

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

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

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[ligação inativa] 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

  #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

O IBAN, é um número utilizado para qual transação, tanto entre bancos de Portugal como com o estrangeiro. É composto pelo antigo 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]

Para converter um NIB em IBAN basta acrescentar "PT50" antes do NIB. Exemplo: PT50 BBBB AAAA CCCC CCCC CCC KK

Referências

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

Ligações externas

  • Aplicação online para obter o NIB através do número da conta
  • Verificação de IBAN para a valida
  • Folha para Cálculo do NIB

Bibliografia

  • «Banco de Portugal — Transferências a Crédito: Sistemas de Pagamento. Cadernos do Banco de Portugal. Lisboa (2002), n.º 2» (PDF) 
Ícone de esboço Este artigo sobre um banco ou instituição financeira é um esboço. Você pode ajudar a Wikipédia expandindo-o.
  • v
  • d
  • e