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