Gunnar Bittersmann: Einfaches Randomize-String-Skript geht nicht

Beitrag lesen

@@Bachforelle

soll es ausgeben:

ZTQ-23782
AWB-93849

also 3 Großbuchstaben, Bindestrich und dann 5 Zahlen.

Also der Reihe nach: zuerst 3 Großbuchstaben. Da die Anzahl der Schleifendurchläufe von vornherein bekannt ist, kommt eine for-Schleife in Betracht, keine while-Schleife.

Innerhalb der Schleife ziehst du eine Zufallszahl x; die ist aus dem Intervall [0, 1[, d.h. 0 ≤ x < 1. Wenn du die nun mit der Anzahl der möglichen Buchstaben (von A bis Z sind’s 26) multipliziert, erhältst du eine Zahl aus [0, 26[. Davon nimmst du den ganzzahligen Anteil und erhältst eine Zahl aus {0, 1, 2, …, 25}.

'A' hat den Codepoint U+0041. Wenn du also zu deiner Zahl x41 = 65 dazuaddiert, erhältst eine Zahl aus {x41, x42, x43, …, x5A}, die du in ein Zeichen aus {'A', 'B', 'C', …, 'Z'} umwandelst.

[Ende der Schleife]

Den Bindestrich hinzuzufügen sollte nicht das Problem sein.

Nun eine Schleife für die Ziffern, von denen es nicht 26 mögliche, sondern 10 gibt. Der Offset, um von den Zahlen 0 bis 9 auf die Zeichen '0' bis '9' zu kommen, wäre x30. ('0' hat den Codepoint U+0030.) [Ende der Schleife]

Du kannst natürlich auch gleich deine Zufallszahl mit 10⁵ = 100000 multiplizieren und sparst die zweite Schleife.

Hätte man bei der ersten Schleife auch machen können, d.h. gleich mit 26³ multiplizieren und die Zahl in 3 Zeichen umwandeln. Das dürfte aber für dich komplizierter sein.

LLAP

--
„Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)