2011-09-20 4 views
1

Je vais essayer d'être simple, clair et direct. Mon problème est le suivant: J'ai un projet où j'ai besoin de générer des codes pour les cartes à gratter. Les cartes scrath sont imprimées comme celles que vous utilisez pour charger votre téléphone portable .Codes pour cartes à gratter

Le système consiste en ce que les gens achètent les cartes, obtiennent les codes sur les cartes, puis appellent un serveur TOIP (astérisque) et insèrent le code pour accéder à un service. Il est donné trois tentatives pour entrer le bon code.

J'ai pensé faire un programme PHP pour générer ces codes, donc j'ai sûrement besoin de passer par un PRNG (Pseudo Random Number Generator). Mes contraintes sont les suivantes:

-Comme les utilisateurs appellent, le code ne doit pas être trop long, mais assez long pour assurer la sécurité.

-I besoin que le système soit assez rapide lorsque la comparaison est faite entre le code entré et celui stocké dans la base de données (nécessaire à des fins de statistiques).

Mes questions est:

-Est-il droit d'utiliser un PRNG?

-Si oui, en connaissez-vous un assez fort pour générer de bons nombres aléatoires?

-Quelles normes sont utilisées par l'industrie? -Comment faire l'algorithme de comparaison assez rapide si la comparaison est faite sur des millions de codes?

Merci pour votre temps et vos réponses.

+0

Qu'entendez-vous par "comparaison"? Est-ce que vous vérifiez simplement si le code est présent/valide? – NullUserException

+0

Une autre option consiste à générer des hachages basés sur les données de vos sels db +. À cette fin, une sortie de hachage correctement salée serait tout aussi difficile à casser qu'une sortie de RNG appropriée. –

+0

** @ NullUserException **: Exact. Désolé si c'était ambigu. en fait je veux que le chèque soit le plus rapide possible. Les appels téléphoniques sont dans le domaine "en temps réel", donc ...; ** @ Marc B **: Merci pour le conseil, je vais étudier de cette façon. – RedLion

Répondre

3

Oui, PRNG fonctionnera correctement après l'avoir légèrement modifié.

http://en.wikipedia.org/wiki/Random_password_generator

Vous pouvez vous référer au code de générateur de mot de passe dans le lien ci-dessus. Vous devez vous assurer que le premier chiffre n'est pas 0 et n'utilisez que des chiffres et non des alphabets.

Une fois qu'un nombre est généré, vous devez vérifier s'il existe dans DB ou non avant de l'insérer.

Normalement, 16 caractères/chiffres sont utilisés par les industries. Vous pouvez également générer des nombres à 20 chiffres pour accélérer l'ensemble du processus.

Pour faire correspondre plus rapidement, vous devez indexer le champ dans la base de données. le plus probablement ce sera un char (16) ou un char (20).

Note: comme il n'y a pas besoin de varchar ici char est la meilleure option. Conserver le moteur de table Mysql en tant que MYISAM pour une comparaison rapide.

+1

Merci, c'était éclairant; Je pense avoir assez d'éléments pour écrire le programme.Quoi qu'il en soit, 16 chiffres semble trop long, 10 pour moi serait mieux; le client paye déjà la communication, le nombre de chiffres qu'il tape ne devrait pas être trop élevé. – RedLion

Questions connexes