Vérification de la validité d'un billet de banque

Soyez le premier à donner votre avis sur cette source.

Vue 26 759 fois - Téléchargée 578 fois

Description

Ce script va, lorsque vous rentrez le numéro de série (avec la lettre au début) de n'importe quel billet Euro, vous dire si le billet que vous avez en votre possession est un vrai ou un faux. :)

Source / Exemple :


##########################################
## AUTRE VERSION DISPONIBLE DANS LE ZIP ##
##########################################

      <?php
if(isset($_POST['num']))
{
  if(preg_match("/[^:alnum:]/", $_POST['num'])) 
  {
  $letter = $_POST['num']{0};
    if(preg_match("/^[L-Z]/", $letter) && $letter != ("O"|"Q"|"W"))
    {
      switch ($letter) 
      {
        case 'L':
			$pre = '12';
			$num = str_replace("L", "12", $_POST['num']);
			break;
		case 'M':
			$pre = '13';
			$num = str_replace("M", "13", $_POST['num']);
			break;
		case 'N':
			$pre = '14';
			$num = str_replace("N", "14", $_POST['num']);
			break;
		case 'P':
			$pre = '16';
			$num = str_replace("P", "16", $_POST['num']);
			break;
		case 'R':
			$pre = '18';
			$num = str_replace("R", "18", $_POST['num']);
			break;
		case 'S':
			$pre = '19';
			$num = str_replace("S", "19", $_POST['num']);
			break;
		case 'T':
			$pre = '20';
			$num = str_replace("T", "20", $_POST['num']);
			break;
		case 'U':
			$pre = '21';
			$num = str_replace("U", "21", $_POST['num']);
			break;
		case 'V':
			$pre = '22';
			$num = str_replace("V", "22", $_POST['num']);
			break;
		case 'X':
			$pre = '24';
			$num = str_replace("X", "24", $_POST['num']);
			break;
		case 'Y':
			$pre = '25';
			$num = str_replace("Y", "25", $_POST['num']);
			break;
		case 'Z':
			$pre = '26';
			$num = str_replace("Z", "26", $_POST['num']);
			break;
	  }
	  if((strlen($num) == 13) OR (preg_match("/[^0-9]/", $num)))
	  {
	    if ( bcmod($num, "9") == 8) 
		{
		  echo "<br /><br /><h2><font color='green'>Votre billet est <b>vrai</b></font></h2><br /><br />";
		}
		else
		{
		  echo "<br /><br /><h2><font color='red'>Votre billet est <b>faux</b></font></h2><br /><br />";
		}
	  }
	  else
	  {
    	echo "<font color='red'><b>Numéro de série invalide!<br /><br /><font size='2'><u>Rappel:</u> 1 lettre (entre L et Z exceptées O, Q et W) puis 11 chiffres.</font></b></font><br /><br />";
	  }
	}
	else
	{
      echo "<font color='red'><b>Numéro de série invalide!<br /><br /><font size='2'><u>Rappel:</u> 1 lettre (entre L et Z exceptées O, Q et W) puis 11 chiffres.</font></b></font><br /><br />";
	}
  }
}
else
{
  echo "<br /><br /><br />";
}
    ?>
	
    <form id="form1" name="form1" method="post" action="">
      <label for="num">Numéro de série :</label>
      <input type="text" name="num" id="num" maxlength="12" />
      <p>
        <input type="submit" name="Envoyer" id="Envoyer" value="Envoyer" />
        <input type="reset" name="Envoyer2" id="Envoyer2" value="Réinitialiser" />
      </p>
    </form>

Conclusion :


Petites explications quand au travail du script.
En fait, la vérification d'un billet de banque (Euro) se fait de la manière suivante : On prend la première lettre du numéro de série et on détermine son rang dans l'alphabet. Ensuite on rassemble ce chiffre (par exemple 21 si c'est la lettre U) avec le reste du numéro de série.
Ce nombre doit donner 8 lorsqu'on le met modulo 9. Si le résultat est différent de 8, le billet est faux ;)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
72
Date d'inscription
mardi 5 juillet 2005
Statut
Membre
Dernière intervention
8 février 2009

Modifications effectuées ;)
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
@Kankrelune : Bravo pour le monologue, j'aurais pas fait mieux.

@The_Magicien : Ben si on poste en commentaire, c'est pour que tu puisses bénéficier des améliorations qu'on propose. Tu ne t'appropries pas notre travail, on te le donne. C'est pas pareil.

Et puis même si tu considères que ce n'est pas toi qui a écrit ce code, il l'a été en tout cas à ton initiative : il ne me serait pas venu à l'idée de me renseigner sur la manière dont vérifier un numéro de série d'un billet Euro, de même qu'il ne me serait pas venu à l'idée non plus d'écrire un code pour le vérifier.
Les commentaires avaient donc pour but de te montrer comment faire plus simple, plus efficace et plus élégant (en plus, là, t'as directement une fonction utilisable dans n'importe quelle application). Ils avaient aussi pour vocation de le montrer à tout le monde.

Tu peux donc sans scrupule l'utiliser. Si tu ne veux pas le mettre à la place de ton code, ce que je peux comprendre, tu peux le mettre à la suite ;)
Mais je t'en prie... On se fout de droits d'auteurs sur des commentaires sur une source ^^
Messages postés
72
Date d'inscription
mardi 5 juillet 2005
Statut
Membre
Dernière intervention
8 février 2009

@ Evangun : Ce code n'est pas difficile à générer singulièrement. Cependant, si on veut entrer dans l'optique d'un faussaire il veut faire beaucoup d'argent donc si on veut générer des milliers, des millions de numéros de série, ça prend beaucoup plus de temps et c'est plus simple de mettre des numéros complètement aléatoires.

@ Kankrelune et Neigedhiver : Je ne sais pas si je vais faire les modifications parce que sinon, ce ne sera plus le code que moi j'ai fait donc c'est également par respect pour ce que vous m'avez proposé, je ne voudrais pas m'approprier le travail des autres.

Merci pour ces commentaires.
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Muarf je suis con moi... .. .

function validateSerial($num)
{
if(!empty($num) && preg_match('`^([l-npr-vx-z])([0-9]{11})$`i', $num, $matches))
{
return (bcmod(
str_replace(
$matches[1],
ord(strtoupper($matches[1])) - 64,
$matches[0]), '9') === '8');
}
return false;
}

@ tchaOo°
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

>> Neigedhiver : bcmod prend des chaines de caractères en argument et renvoie une chaine... .. .

function validateSerial($num)
{
if(!empty($num)|| preg_match('`^([l-npr-vx-z])([0-9]{11})$`i', $num, $matches))
{
return (bcmod(
str_replace(
$matches[1],
ord(strtoupper($matches[1])) - 64,
$matches[0]), '9') === '8');
}
return false;
}

@ tchaOo°
Afficher les 15 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (The_magicien)