<?php // Licence Publique Générale GNU (GNU General Publique License), Copyright 2005-2008 Geffrotin Yann

  // ISO 13616-1:2007
  
  //0. Enlever les caractères indésirables (espaces, tirets)
    $iban = str_replace(" ", "", $iban);
    $iban = str_replace("-", "", $iban);
    $taille = strlen($iban); //extraction de la taille de la chaine

  //1. Déplacer les 4 premiers caractères à droite
  $ibanverif = substr($iban, 4, $taille-4)."".substr($iban, 0, 4); //réassemblage : 23 suivants + 4 premiers
   
  //2. Convertir les lettres en chiffres via une table de conversion (A=10, B=11, C=12 etc)
  
    for($cpt='0';$cpt<=$taille-1;$cpt++)
    {
      if (ereg ("[A-Z]", $ibanverif[$cpt])){ //Trouve la lettre
        $ibanverif = substr($ibanverif, 0, $cpt).base_convert($ibanverif[$cpt], 36, 10).
          substr($ibanverif, $cpt+1, $taille); //Réassemblage
        $taille = $taille + 1 ; //La lettre est codé sur 2 chiffres
      }
    }
  
  //3. Diviser le nombre par Modulo de 97, et si le résultat vaut 1 alors l'IBAN est correct
  
  if(bcmod($ibanverif, '97') == '1'){
    $valid = true;
  }else{
    $valid = false;
  }
  
?>
