webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 2009
-
10 août 2008 à 21:44
alecsy
Messages postés2Date d'inscriptionmercredi 3 février 2010StatutMembreDernière intervention 9 avril 2015
-
9 avril 2015 à 09:07
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
alecsy
Messages postés2Date d'inscriptionmercredi 3 février 2010StatutMembreDernière intervention 9 avril 2015 9 avril 2015 à 09:07
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é.
cs_patrick
Messages postés31Date d'inscriptionvendredi 19 mai 2000StatutMembreDernière intervention21 juillet 2015 29 janv. 2015 à 17:15
personnellement, je préfère surcharger la class String :
// Ajout des méthodes 'ltrim()', 'rtrim()' et 'trim()' à la class String String.prototype.trim = function() { return this.replace(new RegExp('^\\s+|\\s+$', 'g'), ''); } String.prototype.rtrim = function() { return this.replace(new RegExp('\\s+$'), ''); } String.prototype.ltrim = function() { return this.replace(new RegExp('^\\s+'), ''); }
// Ajout des méthodes 'left()' et 'right()' à la class String String.prototype.left = function(n) { return this.substring(0,n); } String.prototype.right = function(n) { return this.substring(this.length-n); }
// Méthode 'isEmail()' : Permet de contrôler que la donnée représente une adresse email. String.prototype.isEmail = function() { var regexp = new RegExp("^[a-zA-Z0-9_\\-\\.]{3,}@[a-zA-Z0-9\\-_\\.]{2,}\\.[a-zA-Z]{2,}$", "g"); return regexp.test(this); }
// Aout de la méthode 'isEAN()' : permet de contrôler que la donnée est un EAN valide. (EAN8, EAN13, DUN14, SSCC...) // Rq : cette version ne prend pas en compte les lettres dans les EAN128 String.prototype.isEAN = function() { var result = false; if (this.length>1) { var clef = 0; var code = this.substring(0,this.length-1).trim(); for(ind=(code.length-1) ;ind>=0; ind-=2) { clef = clef + parseInt(code.substr(ind,1)); } clef = clef * 3 for (ind=(code.length-2); ind>=0; ind-=2) { clef = clef + parseInt(code.substr(ind,1)); } clef = (10 - (clef % 10)) % 10; result = (this.trim() == code + clef) } return (result) }
Il suffit de mettre ce code dans un .js et l'inclure dans les pages html. L'utilisation en est alors très simple :
var toto = "1234567895"; if (toto.trim()=="123456") { .... } else if (toto.isEAN()) { .... }
marciv
Messages postés6Date d'inscriptionmercredi 19 octobre 2005StatutMembreDernière intervention21 janvier 2009 21 janv. 2009 à 01:53
Merci pour le code il me manquait cela pour ajouter à la classe de codefalse de gestion des formulaire greaaat !
webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 20094 11 août 2008 à 00:35
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();
}
webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 20094 11 août 2008 à 00:32
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');
}
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.
CrocoRICo
Messages postés2Date d'inscriptionsamedi 1 octobre 2005StatutMembreDernière intervention10 août 2008 10 août 2008 à 22:49
On peut très bien se passer de la POO ! :D :D :D
webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 20094 10 août 2008 à 21:44
Dans une classe avec des méthodes statiques, ça pourrait être encore mieux :)
9 avril 2015 à 09:07
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é.
29 janv. 2015 à 17:15
Il suffit de mettre ce code dans un .js et l'inclure dans les pages html. L'utilisation en est alors très simple :
21 janv. 2009 à 01:53
11 août 2008 à 00:35
try
{
if(true === SiretValidator::isValid('BCD345FGOUX54'))
{
echo 'SIRET valide';
}
}
catch(Exception $e)
{
echo 'SIRET invalide pour la raison suivante :
';
echo $e->getMessage();
}
11 août 2008 à 00:32
<?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.
10 août 2008 à 22:49
10 août 2008 à 21:44