Last active
December 30, 2015 05:59
-
-
Save GregoireHebert/7786773 to your computer and use it in GitHub Desktop.
Méthode de génération de l'identifiant créditeur SEPA
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Génère l'identifiant créditeur SEPA à partir du Numéro National Emetteur à partir de la méthode de calcul de l'EPC (http://www.europeanpaymentscouncil.eu/content.cfm?page=sepa_direct_debit_%28sdd%29).<br/> | |
* Les identifiants Créditeurs SEPA sont attribué par la banque de france. Seuls les créditeurs ayant un compte dans une banque française | |
* peut faire la demande d'un identifiant de créditeur. La demande doit être faite auprès de la banque de france par l'établissement bancaire du créditeur. | |
* Cet établissement doit avoir un accord avec le conseil européen des paiements. | |
* (France métropolitaine, Guyane Française, Guadeloupe, Martinique, Mayotte, Réunion, Saint Barthélemy, Saint Martin, Saint Pierre et Miquelon) | |
* @param string $numero_national_emetteur Identifiant de l'émetteur sur maximum 27 caratères. Est composé de caractères alphanumériques. | |
* @param string $pays Identifiant du pays au format iso. (http://www.iso.org/iso/fr/french_country_names_and_code_elements.htm) (par défaut : FR) | |
* @param string $activite Identifiant de l'activité de l'émetteur sur 3 caratères alphabétiques. (optionnel) | |
* @return string ICS Identifiant créditeur SEPA | |
*/ | |
function getICS($numero_national_emetteur, $pays = 'FR', $activite = 'ZZZ'){ | |
// gestion des erreurs | |
if (is_numeric($pays) || strlen($pays) != 2) trigger_error ('Le code du pays doit respecter la norme ISO.', E_USER_ERROR); | |
if (is_numeric($activite) || strlen($activite) != 3) trigger_error ('Le code d\'activité du créditeur doit être composé de 3 lettres majuscules.', E_USER_ERROR); | |
if (strlen($numero_national_emetteur) > 27 ) trigger_error ('Le numéro national émetteur ne peut dépasser 27 caractères.', E_USER_ERROR); | |
$nneISOFormat = $numero_national_emetteur . $pays . '00'; | |
$nneConvert = str_replace(array('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'), | |
array( 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 ,24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35), | |
$nneISOFormat); | |
$retenue = intval(bcmod($nneConvert, "97")); | |
$cle = 98-$retenue; | |
$ics = $pays . $cle . $activite . $numero_national_emetteur; | |
return $ics; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment