# 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.

### 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 NIB
## 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:
$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#
### 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.

### 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

### 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).

### Validação em RUBY
## 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