Hallo Experten,
ich muss mit PHP einen Gutscheincode erzeugen. Der Code muss eindeutig sein. Ich brauche 100.000 verschiedene Codes und weiß nicht wie man das bewerkstelligen könnte. Hat jemand eine Idee?
Herzlichen Dank.
Gruß
Roland
Hallo Experten,
ich muss mit PHP einen Gutscheincode erzeugen. Der Code muss eindeutig sein. Ich brauche 100.000 verschiedene Codes und weiß nicht wie man das bewerkstelligen könnte. Hat jemand eine Idee?
Herzlichen Dank.
Gruß
Roland
laufend nummer?
"Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)
Wenn es nen Wirrwarr sein soll, dann generier doch mit Random 100.000 Codes und vergleiche alle, ob keine doppelt sind *ggg*
Verteilt die Macht, dass sie keinen mächtig macht!
jetzt mal im Ernst:
Welche Anforderungen bestehen denn an diesen Code, außer der Eindeutigkeit?
Wenn das nicht klar ist, dann biete deinem Auftrggeber eine 6-stellige laufende Nummer an.... Dann wird er dir die wirklichen Anforderungen verraten.
"Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)
Hi,
du könntest ja natürlich auch mehrere zufallsgeneratoren machen, ein generator für eine zahl im Code...
Maik
Erstmal danke für Eure Antworten.
Die Anforderungen an den Code sind recht einfach:
1. Keine fortlaufende Nummer
2. Eine Kombination aus Zahlen und Buchstaben
3. Maximal 9 Stellen
4. Das Verhältnis der Zahlen und Buchstaben ist egal. Es können fünf Zahlen und vier Buchstaben oder 3/6 usw. auftreten
ungefähr so:
3dr-6zt-w3e-45z
Viele Grüße und herzlichen Dank
Boxa
1. Du generierst dir erst mal ausgehend von einem x-beliebigen Code, zählst irgendwas hoch, was sich auch über Zeichen erstreckt (8,9,a,b,c...) bekommst "Unikate", der Fantasie sind keine Grenzen gesetzt.Zitat von boxa
Wenn du um 2,3 oder sonstwas hochzählst, sind es auch keine fortlaufenden Nummern.
2. Du wendest den "[Uni]Ka(r)ten-Misch-Algorithmus" an:
der Reihe nach 1 Karte mit einer anderen beliebigen tauschen
Wenn der Server unter Linux läuft, einfach für jeden Code 7 bytes aus /dev/urandom lesen, jagst diese durch Base 64, nimmst nur die ersten 9 Zeichen des ergebnisses, ersetzt + und / durch einen beliebigen Buchstaben, und wandelst evtl. noch in Großbuchstaben um, wenn der Code case-insensitve sein soll.
Wenn er nicht unter Linux läuft, kannst du natürlich auch PHPs random()-Funktionen benutzen.
Und um den Code idiotensicher zu machen, kannst du noch alle "L" durch 1, alle "O" durch 0 ersetzen und bei der Eingaberoutine evtl. auftretende Ls und Os genauso umwandeln.
Geändert von Joghurt (29-04-2005 um 14:51 Uhr)
wenn´s auch Perl sein darf?
PHP-Code:
#!/usr/bin/perl
my @chars= ('a'..'z',0..9); #Zeichen die im Code vorkommen dürfen
my %Codes;
#100.000 garantiert einmalige Codes erzeugen
while( keys(%Codes) <= 100000)
{
my $Code;
$Code .= $chars[int(rand(@chars))]for(0..8);
$Codes{$Code}=1;
print "Bisher " . keys(%Codes) . " erzeugt...\r";
}
print "100.000 Gutschein Codes erzeugt...\n";
#alle Codes ausgeben:
foreach my $Code (keys(%Codes))
{
print "$Code\n";
}
Ich hab's! Etwas, das auch alle 4 Bedingungen erfüllt:
a99999999
a99999998
a99999997
a99999996
etc.
Hmm, warum so kompliziert?
einfach eine Zaqhl hochzhählen dann mit einer nur dir bekannten Zahl xor vergleichen. Das Ergebnis dann vielleicht noch im Hexcode ausgeben. Wenn der Gutschein zurück kommt, Zahl erfassen und wieder mit xor und der dir bekannten Zahl vergleichen. Das Ergebnis ist dann deine Ausgangszahl.
Man kann natürlich noch weitere Späße einbauen, weiß aber nicht wie weit du die Sicherheit treiben willst. Könntest ja auch das Ergebnis von MD5 als Gutscheincode ausdrucken, aber dann wirst du bestimmt von deinen Mitarbeitern, die an der Kasse den Code fehlerfrei abtippen müssen, erschlagen und das wollen wir dir nicht antun
Hans
333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....
Hilft dir die Klasse Text_Passwort weiter?
http://pear.php.net/package/Text_Password
(Könnte aber auch schon zu übertrieben sein)
Lesezeichen