8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je travail sur un nouveau projet et j'ai de la peine à me lancer.

Je dois générer 10'000 licences de 8 caractères en chiffre et lettre type "15HZ2A97".
Ces licences vont être envoyée pour impression et fournie avec un achat spécifique.

Le client va acheter le produit et trouver une carte avec le code pour activer son produit.

d'où ma question:

Et-t'il préférable de générer directement 10'000 codes dans une BD et simplement vérifier si ce code existe (comment réaliser un script pour le faire), ou..

Créer une sorte d'algorithme avec une clef qui vérifierais si le code corresponds (surement hard à faire)

Vous avez une idée pour m'aider svp? Merci beaucoup.
BeliG a écrit :
Salut,

C'est gentil de remercier les gens qui prennent de leur temps pour te proposer des solutions à ton problème.


Salut, merci pour ce post fort intéressant. Ne le prends pas personnelement contre toi si je ne t'ai pas répondu et pour être franc, je m'en excuses. Cela dit d'habitude je ne suis pas timide dans les remerciements.
http://forum.alsacreations.com/topic.php?fid=3&tid=35262&s=
http://forum.alsacreations.com/topic.php?fid=3&tid=35041&s=

Bref si vous avez décidé de me bannir et que je dois plus attendre d'aide de votre part pour un oublie. Soit... merci quand même. a+ et longue vie a alsacréation
Bonjour,

T'inquiète pas ici on banni personne...

Sinon la première solution me parait meilleur et plus sure.

Si tu travailles en PHP je te conseille de jeter un oeil sur la fonction array_rand

Tu trouveras notamment des exemples proches de se que tu souhaites dans les commentaires sur php.net
Le problème de la deuxième méthode c'est qu'il est possible de découvrir l'algorythme et ainsi générer des clés pirate. Je suis du même avis que le post précédent, la première méthode me paraît moins vulnérable.

Par contre, l'idéal serait de ne pas en générer d'avance non plus. Parce qu'il existe aussi des moyens d'en récupérer une malgré tout.
Administrateur
masseuro a écrit :
Bonjour,

T'inquiète pas ici on banni personne...

Ah si Smiley murf mais le prochain ne sera pas Sp4tz Smiley cligne

1 combinaison sur 10.000 va être valide, c'est peu pour un ordinateur qui irait s'attaquer au formulaire de validation par bruteforce.
EDIT: mais Smiley biggol c'est pas 10.000 mais 282.110.990 ( (26+10)^8 / 10.000 et pas 10^(8-4) )
En interdisant plus d'un essai par seconde tu seras déjà tranquille ...

<nimp>
Pense à bannir les IP (et les sessions ?) qui se tromperaient un grand nombre de fois. Pas définitivement au bout du 3ème essai parce que ça va impacter les boulets dans mon genre (si c'est écrit avec une matricielle sur du papier glacé, bonjour la qualité de l'impression ...) mais progressivement : "c'est votre 3ème essai merci d'attendre 1 minute avant de réessayer" puis 3 puis 10 puis ... et ban quand tu le souhaiteras. Enfin à toi de voir, je sais pas ce que tu vends ni quel est l'impact d'un pirate qui réussit son coup ou d'un client légitime qui va pas être content et vous incendier au téléphone, par mail ou pire sur les forums d'utilisateurs/clients Smiley ravi Les conseilleurs ne sont pas les payeurs Smiley rolleyes
</nimp>

Pour ceux qui n'auraient jamais reçu le document imprimé mais auraient accès au formulaire en ligne, ne donne aucune indication sur le format attendu ("8 lettres et chiffres") mais seulement sur l'endroit où figure ce fameux code.
Ça évitera aux pirates de savoir quoi essayer comme combinaisons. Ça impacte l'ergonomie et l'accessibilité de ton formulaire mais si ton document imprimé est bien fichu, l'aide existe, elle n'est juste pas présente en ligne mais est imprimée ailleurs.

Aussi, en parlant de document imprimé bien fichu, fais attention aux confusions 0/O/Q 1/L/I 2/Z 5/S 8/B et si la qualité est pourrie 6/G 7/T/1/I/L 8/H 8/B H/N M/N U/V/Y B/R O/D X/K E/F ! Fais des tests avec un myope, un presbyte et un astigmate Smiley lol
Modifié par Felipe (01 May 2010 - 13:59)
Merci pour vos commentaires...

Alors dans un premier temps, je suis parti sur la première solution, c'est à dire de générer une liste de 10'000 codes et de les rentrer dans une BD.

Voici le code en question:

<?php 
// Fichier de connexion à la base de donnée
// require_once('../fr/admin/Connections/xxx.php');
 
function MakeRandomLicence($length=7) {

// Déclaration des variables
$newlicence = "";
$num = array ('1', '2', '3', '4', '5', '6', '7', '8', '9');   
$alpha = array ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I','J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
$code = array ();   


foreach ($num as $x) {
    foreach ($alpha as $y) {   
        array_push($code,"$y");   
        array_push($code,"$x");
		}
	}

for ( $i=0;$i<=$length;$i++)  
$newlicence= $newlicence.$code[array_rand($code) ];

return $newlicence; 
 
}
 

// On déclare le nombre total d'enregistrement voulu et on créé un boucle
// Inscription dans la base de donnée
for($i=1; $i<1001; $i++){
	$value = array(MakeRandomLicence());  
    	 
}$test = array_unique($value);
	foreach($test as $val){
 /* $insertSQL = "INSERT INTO `bwdb`.`keys` (`id`, `key`, `status`, `date`) VALUES (NULL, '$val','0', '')";																										 	mysql_select_db($database_xxx, $xxx);
	$Result1 = mysql_query($insertSQL, $xxx) or die(mysql_error());*/
	echo $val.'<br/>';
		}

?> 

Ce code fonctionne très bien, mais j'y rencontre un problème de taille et que je n'ai malheureusement pas trouvé de solution. Il y a pleins de DOUBLON!

J'ai essayé avec un array_unique() mais je ne dois probablement pas l'utiliser correctement.

Sinon, pour la deuxième solution, elle me parait un peu trop compliquée à réaliser au vu de mes compétences. (générer un algorithme de licence)
Modifié par Sp4tz (03 May 2010 - 10:08)