begin process at 2010 03 18 15:54:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > FONCTIONS DE CONTRÔLES : SIRET, SIREN, EAN-13

FONCTIONS DE CONTRÔLES : SIRET, SIREN, EAN-13


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Classé sous :siret, siren, ean, ean13, codebarre Niveau :Débutant Date de création :10/08/2008 Vu :5 052

Auteur : CrocoRICo

Ecrire un message privé
Site perso
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Fonctions permettant de contrôler la validité des numéros SIREN, SIRET et codes-barres de type EAN-13.

Utilisation :

- is_siret(numero_siret) // pour contrôler le numéro SIRET
- is_siren(numero_siren) // pour contrôler le numéro SIREN
- is_ean13(code_ean13) // pour contrôler un code-barres de type EAN13

Ces différentes fonctions renvoient un code erreur :

- 0 : numéro valide
- 1 : nombre de chiffres incorrects
- 2 : valeur non numérique
- 3 : numéro invalide

Exemple d'utilisation :

Créer un tableau d'erreurs :

          $erreurs[0] = "numéro valide";
          $erreurs[1] = "nombre de chiffres incorrect";
          $erreurs[2] = "valeur non numérique";
          $erreurs[3] = "numéro invalide";

Pour afficher directement le résultat :

          echo $erreurs[is_siren("732829320")];

Pour effectuer un test :

          if (is_siren("732829320") == 0)
          {
                    // instructions si numéro valide
          }
          else
          {
                    // instructions si numéro invalide
          }

Source

  • // fonction permettant de contrôler la validité d'un numéro SIREN
  • function is_siren($siren)
  • {
  • if (strlen($siren) != 9) return 1; // le SIREN doit contenir 9 caractères
  • if (!is_numeric($siren)) return 2; // le SIREN ne doit contenir que des chiffres
  • // on prend chaque chiffre un par un
  • // si son index (position dans la chaîne en commence à 0 au premier caractère) est impair
  • // on double sa valeur et si cette dernière est supérieure à 9, on lui retranche 9
  • // on ajoute cette valeur à la somme totale
  • for ($index = 0; $index < 9; $index ++)
  • {
  • $number = (int) $siren[$index];
  • if (($index % 2) != 0) { if (($number *= 2) > 9) $number -= 9; }
  • $sum += $number;
  • }
  • // le numéro est valide si la somme des chiffres est multiple de 10
  • if (($sum % 10) != 0) return 3; else return 0;
  • }
  • // fonction permettant de contrôler la validité d'un numéro SIRET
  • function is_siret($siret)
  • {
  • if (strlen($siret) != 14) return 1; // le SIRET doit contenir 14 caractères
  • if (!is_numeric($siret)) return 2; // le SIRET ne doit contenir que des chiffres
  • // on prend chaque chiffre un par un
  • // si son index (position dans la chaîne en commence à 0 au premier caractère) est pair
  • // on double sa valeur et si cette dernière est supérieure à 9, on lui retranche 9
  • // on ajoute cette valeur à la somme totale
  • for ($index = 0; $index < 14; $index ++)
  • {
  • $number = (int) $siret[$index];
  • if (($index % 2) == 0) { if (($number *= 2) > 9) $number -= 9; }
  • $sum += $number;
  • }
  • // le numéro est valide si la somme des chiffres est multiple de 10
  • if (($sum % 10) != 0) return 3; else return 0;
  • }
  • // fonction permettant de contrôler la validité d'un code-barres de type EAN-13
  • function is_ean13($ean13)
  • {
  • if (strlen($ean13) != 13) return 1; // le code-barres doit contenir 13 caractères
  • if (!is_numeric($ean13)) return 2; // le code-barres ne doit contenir que des chiffres
  • // on prend chaque chiffre un par un
  • // si son index (position dans la chaîne en commence à 0 au premier caractère) est impair
  • // on triple sa valeur
  • // on ajoute cette valeur à la somme totale
  • for ($index = 0; $index < 12; $index ++)
  • {
  • $number = (int) $ean13[$index];
  • if (($index % 2) != 0) $number *= 3;
  • $sum += $number;
  • }
  • $key = $ean13[12]; // clé de contrôle égale au dernier chiffre
  • // la clé de contrôle doit être égale à : 10 - (reste de la division de la somme des 12 premiers chiffres)
  • if (10 - ($sum % 10) != $key) return 3; else return 0;
  • }
// fonction permettant de contrôler la validité d'un numéro SIREN
function is_siren($siren)
{
	if (strlen($siren) != 9) return 1; // le SIREN doit contenir 9 caractères
	if (!is_numeric($siren)) return 2; // le SIREN ne doit contenir que des chiffres

	// on prend chaque chiffre un par un
	// si son index (position dans la chaîne en commence à 0 au premier caractère) est impair
	// on double sa valeur et si cette dernière est supérieure à 9, on lui retranche 9
	// on ajoute cette valeur à la somme totale

	for ($index = 0; $index < 9; $index ++)
	{
		$number = (int) $siren[$index];
		if (($index % 2) != 0) { if (($number *= 2) > 9) $number -= 9; }
		$sum += $number;
	}

	// le numéro est valide si la somme des chiffres est multiple de 10
	if (($sum % 10) != 0) return 3; else return 0;		
}

// fonction permettant de contrôler la validité d'un numéro SIRET
function is_siret($siret)
{
	if (strlen($siret) != 14) return 1; // le SIRET doit contenir 14 caractères
	if (!is_numeric($siret)) return 2; // le SIRET ne doit contenir que des chiffres

	// on prend chaque chiffre un par un
	// si son index (position dans la chaîne en commence à 0 au premier caractère) est pair
	// on double sa valeur et si cette dernière est supérieure à 9, on lui retranche 9
	// on ajoute cette valeur à la somme totale

	for ($index = 0; $index < 14; $index ++)
	{
		$number = (int) $siret[$index];
		if (($index % 2) == 0) { if (($number *= 2) > 9) $number -= 9; }
		$sum += $number;
	}

	// le numéro est valide si la somme des chiffres est multiple de 10
	if (($sum % 10) != 0) return 3; else return 0;		
}

// fonction permettant de contrôler la validité d'un code-barres de type EAN-13
function is_ean13($ean13)
{
	if (strlen($ean13) != 13) return 1; // le code-barres doit contenir 13 caractères
	if (!is_numeric($ean13)) return 2; // le code-barres ne doit contenir que des chiffres

	// on prend chaque chiffre un par un
	// si son index (position dans la chaîne en commence à 0 au premier caractère) est impair
	// on triple sa valeur
	// on ajoute cette valeur à la somme totale

	for ($index = 0; $index < 12; $index ++)
	{
		$number = (int) $ean13[$index];
		if (($index % 2) != 0) $number *= 3;
		$sum += $number;
	}

	$key = $ean13[12]; // clé de contrôle égale au dernier chiffre
		
	// la clé de contrôle doit être égale à : 10 - (reste de la division de la somme des 12 premiers chiffres)
	if (10 - ($sum % 10) != $key) return 3; else return 0;		
}

 Conclusion

Pour plus d'informations, consulter les pages Wikipedia :

- SIRET : http://fr.wikipedia.org/wiki/SIREN
- SIREN : http://fr.wikipedia.org/wiki/SIRET
- EAN 13 : http://fr.wikipedia.org/wiki/Ean_13


 Sources du même auteur

Source avec Zip Source avec une capture MODULES DE TEST D'EXPRESSIONS RÉGULIÈRES À INTÉGRER DANS UNE...

 Sources de la même categorie

Source avec une capture CALCUL DE TVA MARGE AVEC REMISE FOURNISSEUR SPÉCIALE POUR LE... par lcomb
Source avec Zip EVALUER UNE EXPRESSION À PARTIR D'UNE CHAINE DE CARACTÈRE par TheWeasel47
FONCTION EQUATION LÉGÈRE par ff5
Source avec Zip Source avec une capture TRACEUR DE COURBE EN COORDONNÉES CARTÉSIENNES (MAJ) par fredbonmatin
CONVERTIR LES RÉFÉRENCES DE COLONNE EXCEL DE CHIFFRE EN LETT... par computman007

 Sources en rapport avec celle ci

Source avec une capture GÉNÉRATEUR DE CODE BARRE EAN13 par fyav

Commentaires et avis

Commentaire de webdeb le 10/08/2008 21:44:11 9/10

Dans une classe avec des méthodes statiques, ça pourrait être encore mieux :)

Commentaire de CrocoRICo le 10/08/2008 22:49:58

On peut très bien se passer de la POO ! :D :D :D

Commentaire de webdeb le 11/08/2008 00:32:08

Je sais bien mais je dis juste que ce serait plus intéressant d'encapsuler ça dans des classes et des méthodes statiques. Tu fais une classe par validateur avec une méthode statique isValid() par exemple. De plus, cela te permet de lancer des exceptions cohérente plutôt que des return 1; return 2... Ce qui donne au final pour le validateur de numéro Siret :

<?php

class SiretValidator
{
/**
* Contrôle un numéro SIRET
*
* @param string $siret
* @return boolean
* @throws Exception
* @access public
* @static
*/
public static function isValid($siret)
{
if(14 !== strlen($siret))
{
throw new Exception('Un numéro SIRET doit être composé de 14 caractères');
}

if(false === ctype_digit($siret))
{
throw new Exception('Un numéro SIRET n\'est composé que de chiffres');
}

for($index = 0; $index < 14; $index ++)
{
$number = (int) $siret[$index];
if( 0 === ($index % 2))
{
if(($number *= 2) > 9)
{
$number -= 9;
}
}
$sum += $number;
}

if(0 === ($sum % 10))
{
return true;
}

return false;
}
}

try
{
SiretValidator::isValid('BCD345FGOUX54');
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>

C'est tout de même plus propre n'est-ce pas ?

Au passage, is_numeric() renvoie vrai si tu lui fournis un nombre à virgule flottante. Pour valider le format strict d'un entier, on peut utiliser la fonction ctype_digit() ou bien une expression régulière ou bien encore l'extension Filter.

++

Hugo.

Commentaire de webdeb le 11/08/2008 00:35:48

Pour valider le numéro SIRET :

try
{
    if(true === SiretValidator::isValid('BCD345FGOUX54'))
    {
        echo 'SIRET valide';
    }
}
catch(Exception $e)
{
    echo 'SIRET invalide pour la raison suivante :<br>';
    echo $e->getMessage();
}

Commentaire de marciv le 21/01/2009 01:53:49

Merci pour le code il me manquait cela pour ajouter à la classe de codefalse de gestion des formulaire greaaat !

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

fonction email() [ par plx4ever ] Salut &#224; tous !! Mon site est h&#233;berg&#233; chez Online.net, et j'utilise donc la fonction email(). Je vous fait par de mon code : &nbsp; $Do


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales