ccamel
Goto Top

Code-Generator

Seriennummern, Model-Nummern, Codes, usw. hat schon jeder mal gesehen. Ich möchte mit einer kleinen Funktion veranschaulichen wie man so ein "Code" selbst generieren kann.

Folgende Funktion generiert ein Quadrupel bestehend aus Zahlen von 0-9 und Buchstaben von A-Z. Dabei ergeben sich dadurch insgesammt 1'336'336 (34^4) Möglichkeiten.

Ausgabe:
...
AA5E
DRTX
1646
2R0O
...


Diese Funktion generiert einfach vor sich hin ohne zu prüfen ob ein Quadrupel bereits existiert. Eine Möglichkeit wäre alle ergebnisse in eine Datenbank zu speichern und zu prüfen ob dieser Wert bereits existiert.

<?php
function generatorQuadrupel(){
	$quadrupel = array(); //--- Define Array
	$anzahl = 4; //--- 4 Stellen (Quadrupel)
	for($x = 0; $x < $anzahl; $x++){
		$i = mt_rand(0, 1);
		if($i < 1){
			$single = chr(mt_rand(65, 90)); //--- Zufalls ASCII von A-Z
		}else{
			$single = mt_rand(0, 9); //--- Zufallszahl von 0-9
		}
		$quadrupel[$x] = $single; //--- Das Array wird gefüllt
	}
	return implode("", $quadrupel);  
}
?>


Viel spass damit! Und wenn sich ein Fehler eingeschlichen hat oder jemandem etwas unklar ist einfach melden.

Gruss
Ccamel

Content-ID: 122945

Url: https://administrator.de/contentid/122945

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

Senffass
Senffass 21.08.2009 um 17:05:21 Uhr
Goto Top
Und Wie muss ich den Code ändern, wenn ich den kompletten American Standard Code for Information Icnterchenge(ASCII)-Zeichensatz haben will???
LordXearo
LordXearo 24.08.2009 um 00:14:43 Uhr
Goto Top
Hoi,

bin zwar kein PHp programmierer und kann das jetzt nicht austesten. Aber die Zeile:

$single = chr(mt_rand(65, 90)); --- Zufalls ASCII von A-Z

musst du wohl so abändern:

$single = chr(mt_rand(0, 127));
--- Zufalls ASCII

Gruß

Xearo
ccamel
ccamel 24.08.2009 um 08:50:24 Uhr
Goto Top
Morgen,

LordXenaro liegt mit seiner Vermutung richtig. Dazu noch ein Link: http://www.asciitable.com/

Gruss
Ccamel
81825
81825 24.08.2009 um 08:59:22 Uhr
Goto Top
Im Bereich von 0 - 31 liegen die nicht druckbaren Steuerzeichen. Ob das wirklich sinnvoll ist .....

Abgesehen davon: Die paar Codezeilen als Anleitung anstatt als Tipp zu veröffentlichen, ist schon dreist.
Sokrates
Sokrates 03.09.2009 um 01:49:07 Uhr
Goto Top
Schön knapp aber aufs Wesentliche bezogen.

X
StefanKittel
StefanKittel 09.10.2009 um 08:49:36 Uhr
Goto Top
Moin,

Zufallszahlen an einem Computer erzeugen geht ja eigentlich nicht. Es sind immer Pseudozufallszahlen.
Du gehst immer das Risko ein, dass Deine Routinen oder die des OS fehlerhaft sind und damit in einer endlosschleife hängen (weil schon vorhanden).

Besser wäre ein "System".
Z.B. sehen unsere Rechnungen so aus 200910090001. Also Datum rückwerts mit einem Zähler.
Letzten Wert auslesen, Datum überprüfen, Zähler erhöhen.
Zusätzlich kann man anhand der SN dann noch das Datum erkennen.

Stefan
ccamel
ccamel 12.10.2009 um 10:18:40 Uhr
Goto Top
Salü

Zufallszahlen an einem Computer erzeugen geht ja eigentlich nicht. Es sind immer Pseudozufallszahlen.

"In der Berechenbarkeitstheorie wird alles das als pseudozufällig bezeichnet, was durch den Betrachter nicht von wirklicher Zufälligkeit unterschieden werden kann." - Wikipedia

Du gehst immer das Risko ein, dass Deine Routinen oder die des OS fehlerhaft sind und damit in einer endlosschleife hängen (weil schon vorhanden).

Hast Du das Script überhaupt mal getestet? Bei mir nie hängen geblieben wegen "weil schon vorhanden". Alles eine Sache der Handhabung.

Besser wäre ein "System"...
Du erzählst was von Rechnungen. Find ich super Dein System. Ich aber erzähl was von "Codes" wie man sie bei Captchas oder sonstwo findet.

Gruss
Ccamel
SamTrex
SamTrex 12.10.2009 um 21:26:21 Uhr
Goto Top
Hallo zusammen,
hier auch noch ein kleiner Code-Generator von mir...

Beinhaltet 0-9, a-z, A-Z und einen ganzen Satz an Sonderzeichen!
Die Länge ist begrenzt auf 1024 Zeichen. Damit kommt man in der Regel aus ;)

VBS-Code:
Option Explicit

'Deklaration der Variablen  
Dim index 					'Zähler für die FOR-NEXT-Schleife  
Dim index1 					'Abfrage ob DO-Schleife wiederholt werden soll  
Dim index2 					'Erstelltes Zufallszeichen  
Dim index3 : index3 = "" 	'Länge des Keys  
dim index4 : index4 = 1024 	'Maximale Länge des Keys  
Dim min : min = 33			'Minimalindex für ASCII-Zeichen  
Dim max : max = 126			'Maximalindex für ASCII-Zeichen  
Dim key 					'Key  

'Deklaration der Objekte  
Dim objSHELL : SET objSHELL = createobject("wscript.shell")  

'Zufallswert für Start ermitteln  
Randomize

'Key erstellen  
Do
	index3 = InputBox("Bitte geben Sie die Länge des gewünschten Keys an...", "KeyGen")  
	If index3 = Empty then WScript.Quit 
	If IsNumeric(index3) Then
		if cint(index3) > index4 then
			msgbox "Die gewünschte Länge des Keys ist zu groß!" & vbcr & "Es werden maximal " & index4 & " Zeichen unterstützt.",vbokonly+vbexclamation,"KeyGen"  
			index1 = vbNo
		else
			Do
				key = ""  
				For index = 1 To index3
				index2 = Int((max - min + 1) * Rnd + min)
				key = key & Chr(index2)
			Next
			index1 = objSHELL.popup("Ihr generierter Schlüssel mit einer Länge von " & index3 & " Zeichen:" & vbCr & vbCr & key & vbCr & vbCr & "Zufrieden?",,"KeyGen",vbyesno + vbexclamation)  
			Loop While index1 = vbNo
		end if
	else
		MsgBox "Sie haben keine Zahl eingegeben!", vbCritical, "KeyGen"  
		index1 = vbNo
	End If	
Loop While index1 = vbNo

'Key in Inputbox ausgeben (damit er kopiert werden kann!)  
InputBox "Zum kopieren einfach 'Strg+C' oder 'rechtsklick - Kopieren' wählen","KeyGen",key  

Viel Spaß damit!

Gruß Sam
siroques
siroques 19.03.2010 um 18:16:16 Uhr
Goto Top
Und hier noch die 1 Zeilen Variante in PHP: ;)

function keyGen($l=4){while(strlen($k)<$l)$k.=(mt_rand(0,1)==0?mt_rand(0,9):chr(mt_rand(65,90)));return $k;}

Aufruf dann via "echo keyGen()" oder bei anderer Länge als 4 "echo keyGen(10)"