begin process at 2012 02 11 01:54:40
  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 :9 081

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

EXEMPLE D'APPLICATION DE L'ALGORITHME DE DIJKSTRA EN PHP par philtr8
CLEF POUR EAN 13 ET 14 par RaftY
FONCTION DE CALCUL DU NOMBRE DE DUEL UNIQUE POUR UN NOMBRE N... par mtrix000
Source avec Zip Source avec une capture TRIANGLE DE PASCAL ET SON ÉQUATION par vendeeHdLR89
Source avec Zip CONVERTISSEUR LAMBERT2 ÉTENDU EN COORDONNÉE GÉOGRAPHIQUE (LO... par varfendell

 Sources en rapport avec celle ci

CLEF POUR EAN 13 ET 14 par RaftY
Source avec Zip GÉNÉRER LA CLÉ D'UN CODE-BARRE EAN13 par kalou037
Source avec une capture CLASSE GÉNÉRATEUR DE CODES BARRES 2D DATAMATRIX par TorTukiTu
Source avec une capture GÉNÉRATEUR DE CODE BARRE EAN13 par fyav
Source avec Zip Source avec une capture GÉNÉRATEUR DE CODE BARRE (BARCODE) par GRenard

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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,281 sec (3)

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