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.
Formato BBBB AAAA CCCC CCCC CCC KK
Onde: B = 1-4 código do banco; A = 5-8 código do balcão ou agência (zeros se o banco não utilizar esta referência); C = número da conta (9-19); K = 2 algarismos de controlo (20-21);
Alguns códigos de bancos usados no NIBAnexo à Instrução nº 1/96 +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 - CGD0036 - Banco Montepio 0038 - Banif (passou para o Santander - 0018) 0043 - Abanca Portugal 0045 - Crédito Agrícola (Nacional) 0046 - Popular (passou para o Santander - 0018) 0059 - Caixa Económica da Misericórdia de Angra do Heroísmo 0061 - Big 0065 - Best 0079 - EuroBic 0193 - Banco CTT 0235 - Banco Carregosa 0269 - Bankinter (código anterior à aquisição do Barclays em Portugal) 0500 - ING Wholesale Banking 0781 - Direcção Geral do Tesouro 5180 - Caixa Central de Crédito Agrícola Mútuo (Lisboa)
Verificação do NIB Algoritmo +Tabela de transformação de caracteres Caracter Número correspondente001, A, J12, B, K, S23, C, L, T34, D, M, U45, E, N, V56, F, O, W67, G, P, X78, H, Q, Y89, I, R, Z9 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:
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.
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 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 é: "+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. O IBAN deve ser sempre apresentado para leitura em maiúsculas e em grupos de quatro dígitos separados por espaço.
Para converter um NIB em IBAN basta acrescentar "PT50" antes do NIB. Exemplo: PT50 BBBB AAAA CCCC CCCC CCC KK
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
Categoria:Sistema bancário