Skip to content

Instantly share code, notes, and snippets.

@GregoireHebert
Last active December 30, 2015 05:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GregoireHebert/7786773 to your computer and use it in GitHub Desktop.
Save GregoireHebert/7786773 to your computer and use it in GitHub Desktop.
Méthode de génération de l'identifiant créditeur SEPA
/**
* 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