Número básico da conta bancária

O BBAN (Basic Bank Account Number) ou RIB (extrato de conta bancária na França) ou mesmo uma amostra de cheque ( Quebec ) é uma série de números emitidos pelo banco e que indica exclusivamente uma conta bancária nacional. É concedido a um devedor ou credor para efeitos de transferência bancária ou débito direto desta conta. Esses elementos costumam estar presentes em cheques (talão de cheques).

Substituição do RIB pelo IBAN

Na França

A noção de RIB foi oficialmente abolida com a mudança para o formato SEPA . No entanto, este termo ainda é amplamente utilizado para designar o IBAN ( Número de Conta Bancária Internacional) que identifica uma conta internacional . Hoje, as contas bancárias francesas têm um extrato bancário que inclui: IBAN, RIB e BIC . Na Europa, o IBAN é suficiente para operar as transações bancárias SEPA (débito direto e transferência).

Na França, o IBAN é registrado no extrato da conta em questão.

Legislação

Os regulamentos da SEPA impossibilitam a utilização do RIB para as operações bancárias, sendo o IBAN necessário e suficiente. As transferências nacionais e europeias e os débitos diretos estão sujeitos às mesmas taxas e aos mesmos direitos e obrigações. Também é possível usar o IBAN de outro país europeu no seu próprio país.

As instituições de crédito (BNP, Société Générale, Crédit Agricole, etc.), as instituições de pagamento (Níquel, por exemplo), bem como as instituições de dinheiro eletrónico (Paypal, Treezor, etc.) têm poderes para emitir IBAN.

Composição

Composição do BBAN
3 a 12 posições 8 a 20 posições
IID BANIMENTO

Não tem mais de 30 posições. Cada país é responsável por definir o formato do seu BBAN.

Exemplos

B = código do banco (5 dígitos), G = código da agência (5 dígitos), C = número da conta (11 dígitos e / ou letras), K = tecla RIB (2 dígitos entre 01 e 97)B = código do banco (3 dígitos), C = número da conta (7 dígitos), KK = BBBCCCCCCC módulo 97 (se igual a 0, KK = 97)B = código do banco (8 dígitos), C = número da conta (10 dígitos. Se menos, complete à esquerda com 0s) Nota: o número da conta alemã (C) contém uma chave de controle, mas sua posição e cálculo diferem de um banco para outro. Existem mais de 100 métodos de cálculo chave diferentes na Alemanha (fonte: de: Kontonummer )

Chave RIB

Chave = 97 - ([banco, caixa, concatenação de conta] * 100 módulo 97). Essa chave é semelhante à do número da previdência social francesa, com a diferença de que não é multiplicada por cem. Se a conta contiver letras (bancos franceses Banque Postale e Crédit lyonnais), substitua a letra pelo seu índice de 1 a 9 no alfabeto ( etc.), deixando um salto entre R e S ( ).

Cálculo da chave RIB em Java

public int getRibKey(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); } BigDecimal extendedRibInt = new BigDecimal(extendedRib.toString()); return 97- extendedRibInt.multiply(new BigDecimal(100)).toBigInteger().mod(new BigDecimal(97).toBigInteger()).intValue(); }

O talão de cheques

O extrato bancário, no talão de cheques, é composto por:

  • o número da conta bancária internacional ( IBAN ), número da conta de acordo com o padrão internacional ISO n ° 13616
  • o Código de Identificação do Banco ( BIC ), identificador da instituição financeira (o banco) de acordo com o padrão internacional ISO n ° 9362
  • o nome e endereço do titular da conta, na data de constituição do talão de cheques (os cheques permanecem válidos após a movimentação)
  • o nome da instituição financeira (o banco ) e o balcão de domiciliação (a agência bancária )

Verificação de RIB

Algoritmo

A validade de um RIB é calculada usando a chave para ele.

O primeiro passo é substituir as letras presentes por números para facilitar o cálculo.

Tabela de transformação de personagem
Personagem Figura representando
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

Para fazer a transformação, basta ir à base 36 (base 10 + 26 letras) e aplicar o seguinte cálculo a cada caractere (transformado em um númeroCharValue atual ) e substituir o selecionado pelo número fornecido:


A próxima etapa (opcional) é dividir o código e multiplicar cada parte por uma constante e somá-la. Finalmente, o código está correto se o número obtido (por simples concatenação de nossas diferentes partes, ou por decomposição) for congruente a 0 módulo 97.

Verificando o RIB em C #

A função check_rib retorna verdadeiro ou falso dependendo da validade das informações.

Código-fonte em C # private static Regex regex_rib; /// <summary> /// Vérifie la validité d'un RIB /// </summary> /// <param name="rib">Le RIB à vérifier</param> /// <returns>true si le RIB est valide, false sinon</returns> public static bool IsValidRib(string rib) { // Suppression des espaces et tirets string tmp = rib.Replace(" ", "").Replace("-", ""); // Vérification du format BBBBBGGGGGCCCCCCCCCCCKK // B : banque // G : guichet // C : numéro de compte // K : clé RIB if (regex_rib == null) { regex_rib = new Regex(@"(?<B>\d{5})(?<G>\d{5})(?<C>\w{11})(?<K>\d{2})", RegexOptions.Compiled); } Match m = regex_rib.Match(tmp); if (!m.Success) return false; // Extraction des composants string b_s = m.Groups["B"].Value; string g_s = m.Groups["G"].Value; string c_s = m.Groups["C"].Value; string k_s = m.Groups["K"].Value; // Remplacement des lettres par des chiffres dans le numéro de compte StringBuilder sb = new StringBuilder(); foreach (char ch in c_s.ToUpper()) { if (char.IsDigit(ch)) sb.Append(ch); else sb.Append(RibLetterToDigit(ch)); } c_s = sb.ToString(); // Séparation du numéro de compte pour tenir sur 32bits string d_s = c_s.Substring(0, 6); c_s = c_s.Substring(6, 5); // Calcul de la clé RIB int b = int.Parse(b_s); int g = int.Parse(g_s); int d = int.Parse(d_s); int c = int.Parse(c_s); int k = int.Parse(k_s); int calculatedKey = 97 - ((89 * b + 15 * g + 76 * d + 3 * c) % 97); return (k == calculatedKey); } /// <summary> /// Convertit une lettre d'un RIB en un chiffre selon la table suivante : /// 1 2 3 4 5 6 7 8 9 /// A B C D E F G H I /// J K L M N O P Q R /// _ S T U V W X Y Z /// </summary> /// <param name="letter">La lettre à convertir</param> /// <returns>Le chiffre de remplacement</returns> public static char RibLetterToDigit(char letter) { if (letter >= 'A' && letter <= 'I') { return (char)(letter - 'A' + '1'); } else if (letter >= 'J' && letter <= 'R') { return (char)(letter - 'J' + '1'); } else if (letter >= 'S' && letter <= 'Z') { return (char)(letter - 'S' + '2'); } else throw new ArgumentOutOfRangeException("Le caractère à convertir doit être une lettre majuscule dans la plage A-Z"); }

Algoritmo de chave RIB | Develop.com

 

Verificando o RIB 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()) { int intValue; if ('0' <= currentChar && currentChar <= '9') { intValue = currentChar - '0'; } else if ('A' <= currentChar && currentChar <= 'I') { intValue = currentChar - 'A' + 1; } else if ('J' <= currentChar && currentChar <= 'R') { intValue = currentChar - 'J' + 1; } else if ('S' <= currentChar && currentChar <= 'Z') { intValue = currentChar - 'S' + 2; } else { return false; } extendedRib.append(intValue); } return new BigDecimal(extendedRib.toString()).remainder(new BigDecimal(97)).intValue() == 0; } }

Verificando o RIB em Perl

Com:

  • $ cbank: código do banco
  • $ cguichet: código do contador
  • $ nocompte: número da conta
  • $ clerib: chave de costela
use Math::BigInt; my %letter_substitution = ("A" => 1, "B" => 2, "C" => 3, "D" => 4, "E" => 5, "F" => 6, "G" => 7, "H" => 8, "I" => 9, "J" => 1, "K" => 2, "L" => 3, "M" => 4, "N" => 5, "O" => 6, "P" => 7, "Q" => 8, "R" => 9, "S" => 2, "T" => 3, "U" => 4, "V" => 5, "W" => 6, "X" => 7, "Y" => 8, "Z" => 9); my $tabcompte = ""; my $len = length($nocompte); return 0 if ($len != 11); for (my $i = 0; $i < $len; $i++) { my $car = substr($nocompte, $i, 1); if ($car !~ m/^\d$/) { my $b = $letter_substitution{uc($car)}; my $c = ( $b + 2**(($b - 10)/9) ) % 10; $tabcompte .= $c; } else { $tabcompte .= $car; } } my $int = "$cbanque$cguichet$tabcompte$clerib"; return (length($int) >= 21 && Math::BigInt->new($int)->bmod(97) == 0) ? 1 : 0;

Verificação RIB em PHP

A função check_rib retorna verdadeiro ou falso dependendo da validade das informações.

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) + (($c > 18 && $c < 25) ? 1 : 0); $tabcompte .= $b; } else { $tabcompte .= $car; } } $int = $cbanque . $cguichet . $tabcompte . $clerib; return (strlen($int) >= 21 && bcmod($int, 97) == 0); }

Verificando o RIB em Python

def check_rib(rib): if len(rib) != 23: return False _RIB_MAP = { 'A':'1', 'B':'2', 'C':'3', 'D':'4', 'E':'5', 'F':'6', 'G':'7', 'H':'8', 'I':'9', 'J':'1', 'K':'2', 'L':'3', 'M':'4', 'N':'5', 'O':'6', 'P':'7', 'Q':'8', 'R':'9', 'S':'2', 'T':'3', 'U':'4', 'V':'5', 'W':'6', 'X':'7', 'Y':'8', 'Z':'9', } values = "".join(_RIB_MAP.get(char.upper(), char) for char in rib) if not values.isdigit(): return False bankcode = int(values[:5]) counter = int(values[5:10]) account = int(values[10:21]) key = int(values[21:]) return (bankcode*89 + counter*15 + account*3 + key) % 97 == 0

Verificação de RIB em Ruby

Com:

  • costela: o RIB completo sem espaço para passar para o método.
def rib?(rib) bank, office, account, key = rib.match(/^(\d{5})(\d{5})([[:alnum:]]{11})(\d{2})$/).captures account = account.each_char.inject('') do |sum, char| char = char.to_i 36 sum += ((char + 2 ** ((char - 10)/9)).to_i % 10).to_s end result = bank + office + account + key result.size >= 21 && result.to_i % 97 == 0 rescue # Le RIB n’est pas valide false end

Verificando o RIB no SQL

Esta verificação serve para validar a entrada pelo usuário, que fornece informações sobre a execução da consulta SQL sobre os códigos do Banco , Agência e número da conta , ou para solicitar a entrada de uma nova entrada.

select Saisie.* ,97-mod(Banque*89+Guichet*15+Compte*3,97) CleRIB from (select substr(lpad(&Banque,5,'0'),1,5) Banque ,substr(lpad(&Guichet,5,'0'),1,5) Guichet ,translate(upper(substr(lpad('&Compte',11,'0'),1,11)) ,'ABCDEFGHIJKLMNOPQRSTUVWXYZ' , 12345678912345678923456789 ) Compte from dual ) Saisie;

Verificando o RIB em SQL para Oracle

Esta verificação torna possível verificar um grande número de RIBs, em uma tabela RIB_payment

CREATE TABLE ( rib_id NUMBER(10) , rib_banque VARCHAR2(12) CONSTRAINT rib_banque_nn_payment NOT NULL NOT NULL , rib_guichet VARCHAR2(12) CONSTRAINT rib_guichet_nn_payment NOT NULL , rib_compte VARCHAR2(20) CONSTRAINT rib_compte_nn_payment NOT NULL , rib_cle VARCHAR2(3) , rib_saisie_date DATE DEFAULT SYSDATE CONSTRAINT rib_saisie_date_nn_payment NOT NULL , person_id VARCHAR2(10)/*titulaire, personne morale ou physique*/ CONSTRAINT rib_person_id_nn_payment NOT NULL , CONSTRAINT rib_person_id_uk_payment UNIQUE (person_id) )

previamente inscrita e em relação a uma tabela de pessoas (pessoas singulares ou coletivas).

SELECT IBAN, MOD( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE( REPLACE( substr(IBAN,5,length(IBAN))||substr(IBAN,1,4) ,'A','10'),'B','11'),'C','12'),'D','13'),'E','14') ,'F','15'),'G','16'),'H','17'),'I','18'),'J','19') ,'K','20'),'L','21'),'M','22'),'N','23'),'O','24') ,'P','25'),'Q','26'),'R','27'),'S','28'),'T','29') ,'U','30'),'V','31'),'W','32'),'X','33'),'Y','34') ,'Z','35') ,' ','') ,97) IBAN_modulo FROM COMPTE

A solicitação controla o IBAN (você pode construí-lo facilmente a partir do RIB).

Verificação de RIB em VBA

Este código funciona em Excel, sendo a abreviatura "VBE" a contração de VBA para Excel.

Código fonte em VBA ou VBE

Essas funções são usadas para verificar a validade de um RIB

Function Mod97(Numero As String) As Integer ' Calcule le modulo 97 du numéro donné Dim Nro As String Dim a As Variant, b As Variant, c As Variant, d As Variant, e As Variant, div97 As Variant Nro = Numero a = 0 b = 0 c = 0 e = Right(Nro, 6) d = Mid(Nro, Len(Nro) - 11, 6) Select Case Len(Nro) Case 13 To 20 c = CDbl(Mid(Nro, 1, Len(Nro) - 12)) Case 21 To 28 c = CDbl(Mid(Nro, Len(Nro) - 19, 8)) If Len(Nro) <> 20 Then b = CDbl(Mid(Nro, 1, Len(Nro) - 20)) Case 29 To 38 c = CDbl(Mid(Nro, Len(Nro) - 19, 8)) b = CDbl(Mid(Nro, Len(Nro) - 27, 8)) a = CDbl(Mid(Nro, 1, Len(Nro) - 28)) Case Else Mod97 = 0 Exit Function End Select div97 = Int((a * 93 + b * 73 + c * 50 + d * 27 + e Mod 97) / 97) Mod97 = (a * 93 + b * 73 + c * 50 + d * 27 + e Mod 97) - div97 * 97 End Function Function ControleRib(cbanque As String, cguichet As String, nocompte As String, clerib As String) Const transforme = "12345678912345678923456789" Dim tabcompte As String, lg As Long, i As Long, car As String, c As Integer, rib_int As String tabcompte = "" lg = Len(nocompte) If lg <> 11 Then ControleRib = False Else For i = 1 To lg car = Mid(nocompte, i, 1) If Not IsNumeric(car) Then c = asc(car) - (asc("A") - 1) tabcompte = tabcompte & Mid(transforme, c, 1) Else tabcompte = tabcompte & car End If Next i rib_int = cbanque & cguichet & tabcompte & clerib ControleRib = (Len(rib_int) >= 21) And (Mod97(rib_int) = 0) End If End Function

Você deve inserir essas duas funções em um módulo no editor visual básico (EXCEL ou ACCESS) e chamar de:

1. Excel:

=ControleRib(A1, A2, A3, A4)

Onde A1, A2, A3 e A4 devem conter os 4 valores que constituem o RIB (RIB_Banque, RIB_Guichet, RIB_Compte, RIB_Cle)

2. Acesso:

If ControleRib(RIB_Banque, RIB_Guichet, RIB_Compte, RIB_Cle) Then TESTRIB = "RIB CORRECT" MsgBox " RIB EST CORRECT", vbInformation, "VERIF RIB" Else TESTRIB = "RIB ERRONE" MsgBox " LE RIB EST ERRONE", vbCritical, "VERIF RIB" End If

Onde RIB_Banque, RIB_Guichet, RIB_Compte, RIB_Cle são os nomes das zonas de texto que devem conter o RIB e TESTRIB é o nome da zona de texto que deverá exibir o resultado do teste.

 

Verificação do RIB em VB.NET

Private Function textetochiffre(ByVal numero As String) As Integer If IsNumeric(numero) = False Then numero = Asc(numero) - 55 End If Return Math.Floor((numero + Math.Pow(2, (numero - 10) / 9)) Mod 10) End Function Private Function verifierrib(ByVal plainrib As String) Dim rib As String = "" For i = 0 To plainrib.Count - 1 rib = rib & textetochiffre(plainrib.Substring(i, 1)) Next Dim banknote As String = rib.Substring(0, 5) Dim guichet As String = rib.Substring(5, 5) Dim compte As String = rib.Substring(10, 11) Dim clerib As String = rib.Substring(21, 2) Dim result As Integer = (banknote * 89 + guichet * 15 + compte * 3 + clerib) Mod 97 If result = 0 Then Return True Else Return False End If End Function

Convertendo RIB em IBAN

Algoritmo

  1. Crie um IBAN temporário, composto pelo código do país: FR para França, seguido por "00" e o "código RIB"
  2. Mova os primeiros 4 caracteres do IBAN para a direita do número.
  3. Converta letras em números, de acordo com o princípio "A" é igual a "10" ... "Z" é igual a "35".
  4. Calcule o módulo 97 e subtraia o resto de 98. Se o resultado tiver apenas um dígito, insira um zero à esquerda.

Insira o resultado assim obtido na posição 3 do IBAN temporário criado na etapa 1.

Converter RIB em IBAN em C #

public static string GetIban(string codebanque, string codeGuichet, string numerocompte, string cle) { const string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var tmp = (codebanque + codeGuichet + numerocompte + cle + "FR00").ToUpper(); foreach (var c in tmp.Where(char.IsLetter)) { tmp = tmp.Replace(c.ToString(CultureInfo.InvariantCulture), (alphabet.IndexOf(c) + 10).ToString(CultureInfo.InvariantCulture)); } var ibanKey = (98 - (System.Numerics.BigInteger.Parse(tmp) % 97)).ToString(CultureInfo.InvariantCulture); return "FR" + ((ibanKey.Length == 1) ? "0" : "") + ibanKey + codebanque + codeGuichet + numerocompte + cle; }

Converter RIB em IBAN em Java

public static String getIBAN(String codebanque, String codeGuichet, String numerocompte, String cle) { String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String tmp = codebanque + codeGuichet + numerocompte + cle + "FR00"; tmp = tmp.toUpperCase(); for (char c : tmp.toCharArray()) { if (Character.isLetter(c)) { tmp = tmp .replaceAll(String.valueOf(c), String.valueOf(alphabet.indexOf(c) + 10)); } } String ibanKey = String.valueOf(new BigDecimal(98).subtract(new BigDecimal(tmp).remainder((new BigDecimal(97))))); if (ibanKey.length() == 1) { ibanKey = "0" + ibanKey; } return "FR" + ibanKey + codebanque + codeGuichet + numerocompte + cle; }

Convertendo RIB em IBAN em Perl

use bigint; sub rib_to_iban { my ($rib) = @_; my @letter = ('0'..'9','A'..'Z'); my $iban = ""; foreach my $char(split(//,"${rib}FR00")) { my ($index) = grep { $letter[$_] eq $char } (0 .. @letter-1); $iban .= $index; } my $key = 98 - ($iban % 97); return sprintf("FR%.2d%s" ,$key, $rib); }

Converter RIB em IBAN em PHP

function Rib2Iban($codebanque,$codeguichet,$numerocompte,$cle){ $charConversion = array("A" => "10","B" => "11","C" => "12","D" => "13","E" => "14","F" => "15","G" => "16","H" => "17", "I" => "18","J" => "19","K" => "20","L" => "21","M" => "22","N" => "23","O" => "24","P" => "25","Q" => "26", "R" => "27","S" => "28","T" => "29","U" => "30","V" => "31","W" => "32","X" => "33","Y" => "34","Z" => "35"); $tmpiban = strtr(strtoupper($codebanque.$codeguichet.$numerocompte.$cle)."FR00",$charConversion); // Soustraction du modulo 97 de l'IBAN temporaire à 98 $cleiban = strval(98 - intval(bcmod($tmpiban,"97"))); if (strlen($cleiban) == 1) $cleiban = "0".$cleiban; return "FR".$cleiban.$codebanque.$codeguichet.$numerocompte.$cle; }

Convertendo RIB em IBAN em Python

Com:

  • costela: o RIB completo sem espaço para passar para o método.
def rib_to_iban(rib): tmp_iban = int("".join(str(int(c,36)) for c in rib+"FR00")) key = 98 - (tmp_iban % 97) return "FR%.2d%s" % (key, rib)

Converter RIB em IBAN em Ruby

Com:

  • costela: o RIB completo sem espaço para passar para o método.
def rib_to_iban(rib) tmp_iban = "#{rib}FR00".each_char.map { |char| char.to_i(36).to_s }.join.to_i key = 98 - (tmp_iban % 97) "FR%.2d%s" % [key, rib] end

Convertendo RIB em IBAN em SQL

Convertendo RIB em IBAN no SQL Server 2008 R2 (Microsoft)

-- Creates an IBAN (International Bank Account Number) from a BBAN (Basic Bank Account Number) and BIC (Bank Identifier Code) -- SQL 2008 R2 -- Tested on several SEPA countries CREATE FUNCTION [dbo].[SQL_F_BBAN_IBAN] (@bban varchar(30), @bic varchar(11)) RETURNS varchar(40) AS -- Creates an IBAN (International Bank Account Number) from a BBAN (Basic Bank Account Number) and BIC (Bank Identifier Code) -- In : BBAN, BIC -- Returns : IBAN BEGIN declare @bbanwk varchar(60), @country char(2), @bbannbp int, @bbanp varchar(9), @pos smallint, @mod int, @i smallint, @keyiban char(2), @iban varchar(40) -- Get the country code from the BIC set @country = substring(@bic, 5, 2) -- Place it at the end of BBAN set @bbanwk = @bban + @country + '00' -- Replace any letters with their numeric value (code ASCII - 55) while isnumeric(@bbanwk+'e0') = 0 BEGIN set @pos = (select patindex('%[^0-9]%',@bbanwk)) set @bbanwk = (select replace(@bbanwk,substring(@bbanwk,@pos,1),ascii(substring(@bbanwk,@pos,1))-55)) END -- Split the BBAN into parts of 9 numbers max (because too long for SQL data type INT) and calculate MOD 97 of each part -- suppose to add 1 iteration each 4 iteration, so init @i = 0 and not 1 for some case. set @bbannbp = ceiling(len(@bbanwk) / 9.0) set @pos = 10 set @i = 0 set @bbanp = left(@bbanwk, 9) while @i <= @bbannbp BEGIN set @mod = cast(@bbanp as int) % 97 -- Put the result at the beginning of the next group set @bbanp = cast(@mod as varchar) + substring(@bbanwk, @pos, 7) set @i = @i + 1 set @pos = @pos + 7 END -- IBAN key 2 characters set @keyiban = right('00' + cast((98 - @mod) as varchar), 2) set @iban = @country + @keyiban + @bban RETURN @iban END GO

Convertendo RIB em IBAN em SQL para Oracle

FUNCTION SO_F_RIB_IBAN(pi_va_rib IN VARCHAR2) RETURN VARCHAR2 IS l_i_loop INTEGER; l_va_return VARCHAR2(40); l_n_clee INTEGER; BEGIN l_va_return := UPPER(pi_va_rib) || 'FR00'; -- Transformation de A-Z en 10-35 FOR l_i_loop IN 0 .. 25 LOOP l_va_return := REPLACE(l_va_return, CHR(65+l_i_loop), (10+l_i_loop)); END LOOP; -- Soustraction du modulo 97 de l'IBAN temporaire à 98 l_n_clee := (98 - MOD(l_va_return,97)); -- Retourne l'iban RETURN 'FR' || TRIM(TO_CHAR(l_n_clee, '00')) || UPPER(pi_va_rib); END SO_F_RIB_IBAN;

Converter RIB em IBAN em VBA

Este código funciona em Excel, sendo a abreviatura "VBE" a contração de VBA para Excel.

Convertendo RIB em IBAN em VB.NET

Public Function GetIBAN(rib As String) As String rib = rib.Replace(" ", "") Dim tmpIBAN As New StringBuilder() For Each c As Char In (rib + "FR00").ToUpper() Dim v As Integer = Asc(c) + If(c >= "A"c, -Asc("A") + 10, -Asc("0")) tmpIBAN.Append(v) Next Dim tmpIBANString As String = tmpIBAN.ToString() Dim checksum As Integer = 0 For Each c In tmpIBANString checksum *= 10 checksum += Integer.Parse(c) checksum = checksum Mod 97 Next Dim ibanKey As String = (98 - checksum).ToString() Return "FR" + Right("0" & ibanKey, 2) + rib End Function

Convertendo RIB em IBAN em JavaScript

function GetIban(codeBanque, codeGuichet, numCompte, cleRib) { var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var tmp = ""; tmp = "" + String(codeBanque) + String(codeGuichet) + String(numCompte) + String(cleRib) + "FR00"; tmp = tmp.toUpperCase(); tmp = tmp.split(""); for (var i = 0; i < tmp.length; i++) { if (alphabet.indexOf(tmp[i]) != -1) { tmp[i] = String(alphabet.indexOf(tmp[i]) + 10); } } tmp = tmp.join(""); var moduloRemainder = parseInt(tmp % 97, 10); var ibanKey = (98 - moduloRemainder).toString(); if (ibanKey.length == 1) { ibanKey = "0" + ibanKey; } return "FR" + ibanKey + codeBanque + codeGuichet + numCompte + cleRib; };

Artigos relacionados

Referências

  1. "  Débitos diretos: a conta bancária dá lugar aos padrões SEPA  " , no Le Monde.fr ,1 r agosto 2014(acessado em 9 de janeiro de 2020 )
  2. "  REGULAMENTO (UE) Nº 260/2012 DO PARLAMENTO EUROPEU E DO CONSELHO  "
  3. "  Artigo R351-5 do código monetário  "
<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">