[PLUGINS] +set de base
[lhc/web/www.git] / www / plugins / verifier / verifier / siren_siret.php
1 <?php
2
3 // Sécurité
4 if (!defined("_ECRIRE_INC_VERSION")) return;
5
6 /**
7 * Validation d'un SIREN ou d'un SIRET
8 *
9 * 1/ Un SIREN comporte STRICTEMENT 9 caractères
10 * 1b/ Un SIRET comporte strictement 14 caractères
11 * 2/ Un siren/siret utilise une clef de controle "1-2"
12 * Un siren/siret est donc valide si la somme des chiffres pairs
13 * + la somme du double de tous les chiffres impairs (16 = 1+6 = 7) est un multiple de 10
14 *
15 * @param string $valeur
16 * La valeur à vérifier.
17 * @param array $options
18 * Indique s'il faut tester le SIREN ou le SIRET.
19 * @return string
20 * Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
21 */
22 function verifier_siren_siret_dist($valeur, $options=array()){
23 if (!$options['mode'] or !in_array($options['mode'], array('siren', 'siret'))){
24 $mode = 'siren';
25 }
26 else{
27 $mode = $options['mode'];
28 }
29
30 // on supprime les espaces avant d'effectuer les tests
31 $valeur = preg_replace('/\s/', '', $valeur);
32
33 // Test de SIREN
34 if ($mode == 'siren'){
35 $erreur = _T('verifier:erreur_siren');
36 if (!is_string($valeur))
37 return $erreur;
38
39 // Si pas 9 caractère, c'est déjà foiré !
40 if(!preg_match('/^[0-9]{9}$/',$valeur)) return $erreur;
41
42 // On vérifie la clef de controle "1-2"
43 $somme = 0;
44 $i = 0; // Les impaires
45 while($i < 9){ $somme += $valeur[$i]; $i+=2; }
46 $i = 1; // Les paires !
47 while($i < 9){ if((2*$valeur[$i])>9) $somme += (2*$valeur[$i])-9; else $somme += 2*$valeur[$i]; $i+=2; }
48
49 if ($somme % 10) return $erreur;
50 }
51 // Test de SIRET
52 else{
53 $erreur = _T('verifier:erreur_siret');
54 if (!is_string($valeur))
55 return $erreur;
56
57 // Si pas 14 caractère, c'est déjà foiré !
58 if(!preg_match('/^[0-9]{14}$/',$valeur)) return $erreur;
59 if(preg_match('/[0]{8}/',$valeur)) return $erreur;
60
61 // Pour le SIRET on vérifie la clef de controle "1-2" avec les impaires *2
62 // (vs pairs*2 pour SIREN, parce qu'on part de la fin)
63 $somme = 0;
64 $i = 1; // Les paires
65 while($i < 14){ $somme += $valeur[$i]; $i+=2; }
66 $i = 0; // Les impaires !
67 while($i < 14){ if((2*$valeur[$i])>9) $somme += (2*$valeur[$i])-9; else $somme += 2*$valeur[$i]; $i+=2; }
68
69 if($somme % 10) return $erreur;
70 }
71
72 return '';
73 }