- ISO 13616
-
ISO 13616:2003 est une norme internationale intitulée Banque et services financiers connexes—Numéro de compte bancaire international (IBAN) élaborée par l'Organisation internationale de normalisation (ISO) et le European Committee for Banking Standards (ECBS).
IBAN est l'acronyme de International Bank Account Number.
La norme spécifie les éléments du numéro de compte bancaire du bénéficiaire de paiements transfrontaliers. Elle permet une identification homogène des comptes bancaires dans tous les pays, identifie de manière unique un compte bancaire quel que soit l'endroit où il est tenu. Elle est utilisée pour faciliter le traitement automatisé des paiements transfrontaliers.
Bien qu'un IBAN identifie autant un numéro de compte que l'agence de ce compte, les banques européennes demandent l'utilisation conjointe du BIC et de l'IBAN pour identifier les bénéficiaires des virements européens. Les États Unis n'ont majoritairement pas adopté cette norme.
Sommaire
Composition
Composition de l'IBAN 2 lettres 2 chiffres 30 positions CP CC BBAN - CP : Code du pays
- CC : Clef de contrôle (de 02 à 98 )
- BBAN : Basic Bank Account Number
L'IBAN comprend 34 caractères au maximum et a une longueur, fixe dans chaque pays, supérieure à 14 caractères.
Sous forme écrite, l'IBAN est précédé du sigle «IBAN» et est scindé en groupes de quatre caractères séparés par un espace. Tandis que sous sa forme électronique, il n'y a pas de blancs, ni IBAN au début.
Exemples
- Allemagne (22 caractères) Format IBAN : DEkk BBBB BBBB CCCC CCCC CC
-
- B = codes banque et groupe de comptes (Bankleitzahl/BLZ), C = numéro de compte
- Andorre (24) Format IBAN : ADkk BBBB SSSS CCCC CCCC CCCC
-
- B = code banque, S = code groupe de comptes, C = numéro de compte
- Arabie Saoudite (24) Format IBAN : SAkk BBCC CCCC CCCC CCCC CC
-
- B = code banque, C = numéro de compte, K = clé
- Autriche (20) Format IBAN : ATkk BBBB BCCC CCCC CCCC
-
- B = code banque, C = numéro de compte, K = clé
- Belgique (16) Format IBAN : BEkk BBBC CCCC CCKK
-
- B = code banque, C = numéro de compte, K = clé
- Bosnie-Herzégovine (20) Format IBAN : BAkk BBBS SSCC CCCC CCKK
-
- B = code banque, S = code groupe de comptes, C = numéro de compte, K = clé
- Bulgarie (22) Format IBAN : BGkk BBBB SSSS DDCC CCCC CC
-
- B = code banque alphabétique (quatre premiers caractères du code SWIFT), S = code guichet, D = type de compte (numérique), C = n° de compte alphanumérique. Mis en place le 5 juin 2006.
- Croatie (21) Format IBAN : HRkk BBBB BBBC CCCC CCCC C
-
- B = code banque, C = numéro de compte
- Chypre (28) Format IBAN : CYkk BBBS SSSS CCCC CCCC CCCC CCCC
-
- B = code banque, S = code groupe de comptes, C = numéro de compte
- Danemark (18) Format IBAN : DKkk BBBB CCCC CCCC CC
-
- B = code banque, C = numéro de compte
- Espagne (24) Format IBAN : ESkk BBBB GGGG KKCC CCCC CCCC
-
- B = Code banque, G = code guichet, K = clé, C = n° de compte
- Estonie (20) Format IBAN : EEkk BBBB CCCC CCCC CCCK
-
- B = code banque, C = numéro de compte, K = clé
- Îles Féroé (18) Format IBAN : FOkk CCCC CCCC CCCC CC
-
- Même format que les comptes danois à l'exception du code pays.
- Finlande (18) Format IBAN : FIkk BBBB BBCC CCCC CK
-
- B = codes banque, guichet et type de compte, C = numéro de compte, K = clé.
- France (27) Format IBAN : FRkk BBBB BGGG GGCC CCCC CCCC CKK
-
- B = code banque, G = code guichet, C = numéro de compte, K = clé
- Gibraltar (23) Format IBAN : GIkk BBBB CCCC CCCC CCCC CCC
-
- B = Premiers caractères du SWIFT BIC, C = numéro de compte
- Grande-Bretagne (22) Format IBAN : GBkk BBBB SSSS SSCC CCCC CC
-
- B = code banque alphabétique, S = code groupe de comptes (en général code guichet), C = numéro de compte
- Grèce (27) Format IBAN : GRkk BBB BBBB CCCC CCCC CCCC CCCC
-
- K = clé, B = code banque et code guichet, C = numéro de compte
- Groenland (18) Format IBAN : GLkk CCCC CCCC CCCC CC
-
- Même format que les comptes danois à l'exception du code pays
- Hongrie (28) Format IBAN : HUkk BBBG GGGK CCCC CCCC CCCC CCCK
-
- B = code banque, G = code guichet, C = numéro de compte, K = clé
- Islande (26) Format IBAN : ISkk BBBB SSCC CCCC XXXX XXXX XX
-
- B = code banque, S = type de compte, C = n° de compte, X = numéro d'identification unique du titulaire de compte délivré par le Bureau des statistiques.
- Irlande (22) Format IBAN : IEkk AAAA BBBB BBCC CCCC CC
-
- A = Premiers caractères du code SWIFT), B = code groupe de comptes, C = n° de compte.
- Italie (27) Format IBAN : ITkk ABBB BBCC CCCX XXXX XXXX XXX
-
- A = clé (système italien), B = code banque, C = code guichet (CAB), X = n° de compte.
- Lettonie (21) Format IBAN : LVkk BBBB CCCC CCCC CCCC C
-
- B = Premiers caractères du code SWIFT), C = n° de compte.
- Liechtenstein (21) Format IBAN : LIkk BBBB BCCC CCCC CCCC C
-
- B = code banque, C = numéro de compte
- Lituanie (20) Format IBAN : LTkk BBBB BCCC CCCC CCCC
-
- B = code banque, C = numéro de compte
- Luxembourg (20) Format IBAN : LUkk BBBC CCCC CCCC CCCC
-
- B = code banque, C = numéro de compte
- Macédoine (19) Format IBAN : MKkk BBBC CCCC CCCC CKK
-
- B = code banque, C = numéro de compte, K = clé
- Malte (31) Format IBAN : MTkk BBBB SSSS SCCC CCCC CCCC CCCC CCC
-
- B = premiers caractères du code SWIFT), S = code groupe de comptes, C = numéro de compte
- Monaco (27) Format IBAN : MCkk BBBB BGGG GGCC CCCC CCCC CKK
-
- Même format que les comptes français à l'exception du code pays
- Pays-Bas (18) Format IBAN : NLkk BBBB CCCC CCCC CC
-
- B = code banque, C = n° de compte.
- Norvège (15) Format IBAN : NOkk BBBB CC CCCCC
-
- B = code banque, C = n° de compte, K = clé
- Pologne (28) Format IBAN : PLkk BBBB BBBk CCCC CCCC CCCC CCCC
-
- B = code banque (positions 1 à 3) et code groupe de comptes ou code guichet, C = n° de compte, kk = clés.
- Portugal (25) Format IBAN : PTkk BBBB BBBB CCCC CCCC CCCK K
-
- B = code banque (positions 1 à 4) et code guichet, C = numéro de compte, K = clé
- Roumanie (24) Format IBAN : ROkk BBBB CCCC CCCC CCCC CCCC
-
- B = code banque, C = code guichet et n° de compte.
- Saint-Marin (27) Format IBAN : SMkk ABBB BBCC CCCX XXXX XXXX XXX
-
- Même format que les comptes italiens à l'exception du code pays
- Serbie (22) Format IBAN : RSkk BBBC CCCC CCCC CCCC CC
-
- B = code banque, C = numéro de compte
- Serbie-et-Monténégro
(22) Format IBAN : CSkk BBBC CCCC CCCC CCCC CC
-
B = code banque, C = numéro de compte
- Slovaquie (24) Format IBAN : SKkk BBBB CCCC CCCC CCCC CCCC
-
- B = code banque, C = numéro de compte
- Slovénie (19) Format IBAN : SIkk BB BBB CCCCCCCC KK
-
- B = code banque (2 premières positions) et code guichet, C = code compte, K = clé.
- Suède (24) Format IBAN : SEkk BBBB CCCC CCCC CCCC CCCC
-
- B = Code banque, C = n° de compte
- Suisse (21) Format IBAN : CHkk BBBB BCCC CCCC CCCC C
-
- B = code banque, C = numéro de compte
- République tchèque (24) Format IBAN : CZkk BBBB CCCC CCCC CCCC CCCC
-
- B = code banque, C = numéro de compte, K = clé
- Turquie (26) Format IBAN : TRkk BBBB BRCC CCCC CCCC CCCC CC
- Tunisie (24) Format IBAN : TNkk BBBB BCCC CCCC CCCC CCCC
-
- B = code banque, C = numéro de compte, K = clé
Méthode de calcul des clés de contrôle[1]
0 - Créer un IBAN artificiel, composé du code du pays (ISO 3166), suivi de "00" et du BBAN (sans caractères autres qu'alphanumériques).
Un BBAN belge comme 510-0075470-61 devient BE00510007547061
1 - Déplacer les 4 premiers caractères de l'IBAN vers la droite du numéro.
Résultat : 510007547061BE002 - Convertir les lettres en chiffres, selon la règle suivante. Chaque lettre est remplacée par les deux chiffres du nombre obtenu en ajoutant 9 à son rang dans l'alphabet. On obtient 10 pour A, 11 pour B, ... et 35 pour Z. Résultat : 510007547061111400
3 - Appliquer le MOD 97-10 (cf. ISO 7604). Calculer le modulo 97, c'est-à-dire le reste de la division du résultat précédent par 97, et retrancher ce reste de 98. Si le résultat comporte un seul chiffre, le faire précéder du chiffre zéro. Insérer le résultat ainsi obtenu à la position 2 de l'IBAN artificiel créé dans l'étape préalable (en remplacement des 2 zéros) :
98 - 36 = 62, d'où IBAN = BE62510007547061Cette méthode ne s'applique pas aux comptes bancaires allemands, les banques allemandes utilisant différents modes de calcul pour affecter le code de sécurité (Prüfziffer) de l'IBAN (les deux chiffres qui suivent DE); Source: http://de.wikipedia.org/wiki/Kontonummer
Calcul avec VBA et VBE
Cette commande permet de calculer la clé d'un IBAN et elle utilise la fonction Mod97() détaillée dans le paraghraphe Algorithme de vérification en VBA ou VBE; Algorithme de vérification en VBA ou VBE
Private Sub Commande0_Click() If Not IBA = "" Then Texte1 = UCase(IBA) Texte1 = Replace(IBA, " ", "") trib = Mid(IBA, 3, tlong) tCodePays =Left(IBA, 2) IBA = tCodePays & "00" & trib IBA = Right(Texte1, Len(Texte1) - 4) & Left(Texte1, 4) n = 1 While n <= Len(IBA) x = Mid(IBA, n, 1) If Not IsNumeric(x) Then IBA= Replace(IBA, x, (Asc(x) - 55), 1, 1) End If n = n + 1 Wend iCodeNum = 98 - Mod97(IBA) If iCodeNum < 10 Then sCodeStr = "0" & iCodeNum Else sCodeStr = iCodeNum End If IBA = tCodePays & sCodeStr & trib End If End Sub
Vérification
- Enlever les caractères indésirables (espaces, tirets)
- Déplacer les 4 premiers caractères à droite
- Substituer les lettres par des chiffres via une table de conversion (A=10, B=11, C=12 etc.)
- Diviser le nombre ainsi obtenu par 97. Si le reste n'est pas égal à 1 l'IBAN est incorrect : Modulo de 97 égal à 1
Exemples
GB87 BARC 2065 8244 9716 55
- GB87BARC20658244971655
- BARC20658244971655GB87
- 1110271220658244971655161187
- 1110271220658244971655161187 Modulo
BE43068999999501
- BE43068999999501
- 068999999501BE43
- 068999999501111443
- 068999999501111443 Modulo 97 = 1
Les comptes français uniquement constitués de chiffres ont tous la même clé IBAN égale à 76. Cela est dû à la clé du RIB français qui est elle même un modulo 97. La correspondance numérique des lettres étant différente entre le calcul de la clé RIB et le calcul de la clé IBAN, cela n'est pas vrai pour les comptes français qui comportent au moins une lettre.
Algorithme de vérification en Java
import java.math.BigDecimal; public class Validation { private static final BigDecimal ibanCheckingConstant = new BigDecimal(97); public boolean checkIban(String iban) { //En considerant que iban != null et iban.length > 4 StringBuffer sbIban = new StringBuffer(iban.substring(4)); sbIban.append(iban.substring(0, 4)); iban = sbIban.toString(); StringBuilder extendedIban = new StringBuilder(iban.length()); for(char currentChar : iban.toCharArray()){ extendedIban.append(Character.digit(currentChar,Character.MAX_RADIX)); } return new BigDecimal(extendedIban.toString()).remainder(ibanCheckingConstant ).intValue() == 1; } }
Algorithme de vérification en VB NET
Imports VB = Microsoft.VisualBasic ''' <summary>Renvoie True si le code est IBAN</summary> ''' <param name="code_iban">ByRef, code IBAN nettoyé</param> ''' <modified>24 juin 2010</modified> Public Function isIBAN(ByRef code_iban As String) As Boolean 'http://fr.wikipedia.org/wiki/ISO_13616 '1. Enlever les caractères indésirables (espaces, tirets) '2. Déplacer les 4 premiers caractères à droite '3. Convertir les lettres en chiffres via une table de conversion (A=10, B=11, C=12 etc.) '4. Diviser le nombre ainsi obtenu par 97. Si le reste est égal à 1 l'IBAN est correct ' => BE43 0689 9999 9501 '1ère étape : BE43068999999501 '2ème étape :068999999501BE43 '3ème étape :068999999501111443 avec B=11 et E = 14 '4ème étape :068999999501111443 Modulo 97 = 1 ' http://www.ecbs.org/iban.htm pour la structure des codes IBAN dans les différents pays ' 1. Enlever les caractères indésirables (espaces, tirets, ...) ' => Seuls les lettres majuscules et les chiffres sont autorisés code_iban = code_iban.ToUpper ' tous en majuscules Dim sb As New StringBuilder() For Each carac As Char In code_iban If [Char].IsLetter(carac) Or [Char].IsDigit(carac) Then sb.Append(carac) Next code_iban = sb.ToString ' = code IBAN propre If code_iban.Length < 15 Then Return False ' --------------------------------------------- >>> ' http://www.juliencarnelos.com/2007/09/26/validation-dun-iban-en-c/ ' 2. Déplacer les 4 premiers caractères à droite Dim iban As String = code_iban.Substring(4, code_iban.Length - 4) & code_iban.Substring(0, 4) ' 3. Convertir les lettres en chiffres via une table de conversion (A=10, B=11, C=12 etc.) Dim sb2 As New StringBuilder() For Each c As Char In iban Dim v As Integer If [Char].IsLetter(c) Then v = VB.Asc(c) - VB.Asc("A") + 10 ' VB. => Imports VB = Microsoft.VisualBasic Else v = VB.Asc(c) - VB.Asc("0") End If sb2.Append(v) Next Dim checkSumString As String = sb2.ToString() ' 4. Diviser le nombre ainsi obtenu par 97. Dim checksum As Integer = Integer.Parse(checkSumString.Substring(0, 1)) Dim i As Integer = 1 While i < checkSumString.Length Dim v As Integer = Integer.Parse(checkSumString.Substring(i, 1)) checksum *= 10 checksum += v checksum = checksum Mod 97 System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1) End While ' Si le reste est égal à 1, l'IBAN est correct Return checksum = 1 End Function
Algorithme de vérification en VBA ou VBE
Function Mod97(Numero As String) As Integer 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 36 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 = "#VALEUR!" 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 convIBAN(lettre As String) convIBAN = (Asc(lettre) - 55) End Function Function ControleIban(LeNumIban As String) As Boolean Dim x As String LeNumIban = Replace(LeNumIban, " ", "") LeNumIban = Right(LeNumIban, Len(LeNumIban) - 4) & Left(LeNumIban, 4) n = 1 While n <= Len(LeNumIban) x = Mid(LeNumIban, n, 1) If Not IsNumeric(x) Then LeNumIban = Replace(LeNumIban, x, convIBAN(x), 1, 1) End If n = n + 1 Wend n_iban = Mod97(LeNumIban) If n_iban = 1 Then ControleIban = True Else ControleIban = False End If End Function
Il s'agit d'insérer ces trois fonctions dans un module dans visual basic editor (EXCEL ou ACCESS) et faire l'appel depuis:
1. Excel:
=ControleIban(A1)
Où A1 doit contenir l'IBAN
2.Access:
If ControleIban(IBA) = True Then TESTIBAN = "IBAN CORRECT" MsgBox " IBAN EST CORRECT", vbInformation, "VERIF IBAN" Else TESTIBAN = "IBAN ERRONE" MsgBox " L'IBAN EST ERRONE", vbCritical, "VERIF IBAN" End If
Avec IBA est le nom de la zone du texte qui doit contenir l'IBAN et TESTIBAN est le nom de la zone de texte qui doit aura pour output le résultat du test.
Algorithme de vérification en PHP
function verifierIBAN($iban){ $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"); // Déplacement des 4 premiers caractères vers la droite et conversion des caractères $tmpiban = strtr(substr($iban,4,strlen($iban)-4).substr($iban,0,4),$charConversion); // Calcul du Modulo 97 par la fonction bcmod et comparaison du reste à 1 if (intval(bcmod($tmpiban,"97")) == 1){ return true; }else{ return false; } }
Algorithme de vérification en PHP avec REGEX
Cela ne vérifie pas si l'IBAN est correct pour le pays (ex: FRANCE : longueur 27 caractères, ROYAUME-UNI : longueur 22 caractères ...) Ne vérifie que le modulo 97 donne bien 1
function isValideIBAN ($s_IBAN) { // Vérification que le numéro IBAN est bien défini if(empty($s_IBAN)) return false; // Nettoyage des caractères de formatage et mise en Capital $s_IBAN = strtoupper(trim($s_IBAN)); /* Vérification de l'IBAN par rapport au modèle : - Ne comporte pas ' espace , . / - ? : ( ) , " + - Suppression des caractères IBAN en début de phrase si présent - Déplacement des 4 premiers caractères (2 lettres et 2 chiffres) à la fin de la chaîne - Remplacement des caractères alphabétiques comme suit : A->10, B->11 C->12... Z->35 - Vérifie que le modulo 97 donne 1 */ $s_modele = array('/[\'\s\/\-\?:\(\)\.,"\+]/', '/^IBAN(.+)/', '/([[:alpha:]]{2}[[:digit:]]{2})([[:alnum:]]+)/', "/([A-Z])/e"); $s_retour = array('', '\1', '\2\1', "ord('\\1')-55"); $i_IBAN = preg_replace($s_modele, $s_retour, $s_IBAN); return ((bcmod($i_IBAN, 97) == 1) ? true : false); }
Algorithme de vérification en Javascript
Cet algorithme n'applique qu'une vérification mathématique. La validité du code pays ou la longueur du code IBAN selon le pays n'est pas vérifiée. Quelques normalisations sont effectuées avant le traitement, pour accepter indifféremment les lettre majuscules et minuscules ainsi que les espaces.
function validateIban (iban) { const ibanValidationModulo = 97; // On force les caractères alphabétiques en majuscule iban = iban.toUpperCase(); // on supprime les espaces iban = iban.replace(new RegExp(" ", "g"), ""); // le code iban doit faire plus de 4 caractères if (iban.length < 5) { return false; } // puis on transfert les quatre premiers caractères en fin de chaine. modifiedIban = iban.substring(4, iban.length)+iban.substr(0,4); // On convertit les caractères alphabétiques en valeur numérique numericIbanString = ""; for (var index = 0; index < modifiedIban.length; index ++) { currentChar = modifiedIban.charAt(index); currentCharCode = modifiedIban.charCodeAt(index); // si le caractère est un digit, on le recopie if ((currentCharCode > 47) && (currentCharCode < 58)) { numericIbanString = numericIbanString + currentChar; } // si le caractère est une lettre, on le converti en valeur else if ((currentCharCode > 64) && (currentCharCode < 91)) { value = currentCharCode-65+10; numericIbanString = numericIbanString + value; } // sinon, le code iban est invalide (caractère invalide). else { return false; } } // On a maintenant le code iban converti en un nombre. Un très gros nombre. // Tellement gros que javascript ne peut pas le gérer. // Pour calculer le modulo, il faut donc y aller par étapes : // on découpe le nombre en blocs de 5 chiffres. // Pour chaque bloc, on préfixe avec le modulo du bloc précédent (2 chiffres max, // ce qui nous fait un nombre de 7 chiffres max, gérable par javascript). var previousModulo = 0; for (var index = 0; index < numericIbanString.length; index += 5) { subpart = previousModulo+""+numericIbanString.substr(index, 5); previousModulo = subpart % ibanValidationModulo; } return previousModulo == 1; }
Voir aussi
Particularité sympathique : A = 10, sachant que le code ASCII de A est 65, la transposition lettres / chiffres peut se faire en ASCII de la manière suivante.
En bouclant de 65 à 90 (A à Z), on teste la présence d'une lettre et on la remplace par la valeur numérique du code ascii associé auquel on ôte 55.
Exemples : A = 65 en ascii, 65 - 55 = 10 ce qui est la valeur de transposition recherchée. B = 66 ➜ 11 C = 67 ➜ 12 etc..
Articles connexes
Liens externes
- ECBS Page d'accueil IBAN
- ECBS International Bank Account Number Version 3.2, fichier PDF
- Tout savoir sur les virements : virements domestiques & virements européens (Eurotransfert STP)
- Calculateur RIB → IBAN/BIC-Migration SEPA
- Validateur d'IBAN
- Module vérification code IBAN (contrôle de cohérence)
- Calculateur IBAN (avec convertisseur RIB/IBAN) (Avertissement sécurité : le numéro de compte saisi sur la page de ce lien sera envoyé au site iban-bic.com)
- Documentation CFON EBS204
Wikimedia Foundation. 2010.