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

Signaler
Messages postés
488
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
-
Messages postés
2
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
9 avril 2015
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47561-fonctions-de-controles-siret-siren-ean-13

Messages postés
2
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
9 avril 2015

Salut,
Il n'y aurait pas un problème sur la vérification de la clé de l'EAN 13 ?
Tous les EANs qui se terminent par 0 sont retournés en erreur.
Chez moi, j'ai rajouté if ($key == 0) $key = 10; avant le dernier if autrement il fait Si 10 - 0 != 0 et il plante à chaque fois.
Autrement merci pour ce code qui m'as bien dépanné.
Messages postés
6
Date d'inscription
mercredi 19 octobre 2005
Statut
Membre
Dernière intervention
21 janvier 2009

Merci pour le code il me manquait cela pour ajouter à la classe de codefalse de gestion des formulaire greaaat !
Messages postés
488
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
4
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 :
';
echo $e->getMessage();
}
Messages postés
488
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
4
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.
Afficher les 7 commentaires