| Autor | Zpráva | ||
|---|---|---|---|
| blahapet Profil |
#1 · Zasláno: 19. 8. 2024, 05:39:28
Ahojky, generuji náhodný 12ti místný kód skládající se z velkých písmen a číslic. Můžu mít otázku, co dělám špatně, když jednou to vygeneruje 12 znaků, ale podruhé třeba jen jedenáct, ale také deset nebo devět:
$a1 = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z");
$a2 = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z");
$a3 = array("1","2","3","4","5","6","7","8","9");
$a4 = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z");
$a5 = array("1","2","3","4","5","6","7","8","9");
$a6 = array("1","2","3","4","5","6","7","8","9");
$a7 = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z");
$a8 = array("1","2","3","4","5","6","7","8","9");
$a9 = array("1","2","3","4","5","6","7","8","9");
$a10 = array("1","2","3","4","5","6","7","8","9");
$a11 = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z");
$a12 = array("1","2","3","4","5","6","7","8","9");
$_a1 = rand(0, count($a1));
$_a2 = rand(0, count($a2));
$_a3 = rand(0, count($a3));
$_a4 = rand(0, count($a4));
$_a5 = rand(0, count($a5));
$_a6 = rand(0, count($a6));
$_a7 = rand(0, count($a7));
$_a8 = rand(0, count($a8));
$_a9 = rand(0, count($a9));
$_a10 = rand(0, count($a10));
$_a11 = rand(0, count($a11));
$_a12 = rand(0, count($a12));
echo $a1[$_a1].$a2[$_a2].$a3[$_a3].$a4[$_a4].$a5[$_a5].$a6[$_a6].$a7[$_a7].$a8[$_a8].$a9[$_a9].$a10[$_a10].$a11[$_a11].$a12[$_a12];Děkuji za pomoc. |
||
| Kajman Profil |
rand(0,9) může vrátit 10 možností i když pole má 9 prvků a prvek $pole[9] neexistuje. Vypisujte si chyby včetně notice. Edit: Ten kód je hrůza.
|
||
| Andrej.B Profil |
#3 · Zasláno: 19. 8. 2024, 07:57:52
rychly check u AI.
$letters = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z");
$numbers = array("1","2","3","4","5","6","7","8","9");
// Kombinácia polí, kde je daný index polí, ktorý sa má použiť.
$combination = array($letters, $letters, $numbers, $letters, $numbers, $numbers, $letters, $numbers, $numbers, $numbers, $letters, $numbers);
// Výstupný reťazec
$result = "";
foreach ($combination as $array) {
$result .= $array[array_rand($array)];
}
echo $result; |
||
| blahapet Profil |
#4 · Zasláno: 19. 8. 2024, 09:36:53
Andrej B. - díky moc!
|
||
| N71 Profil * |
#5 · Zasláno: 19. 8. 2024, 12:54:34
Připomíná to trochu soutěž o to, jak nejvíc prasecky generovat "náhodné" řetězce, pánové. A Andrej.B si příště kódy generované jazykovými modely ponechá pro sebe a nebude je vydávat za nějakou radu.
Osobně bych volil spíš kryptograficky bezpečný zdroj náhodných dat, jako random_bytes() a pak psal něco jako: substr(strtoupper(preg_replace('/\W/', '', base64_encode(random_bytes(30)))), 0, 12); |
||
| blahapet Profil |
#6 · Zasláno: 21. 8. 2024, 20:07:46
N71:
Díky moc i Vám, to jsem potřeboval. |
||
|
Časová prodleva: 4 měsíce
|
|||
| blahapet Profil |
#7 · Zasláno: 30. 12. 2024, 16:38:07
Ahoj, omlouvám se, že vytahuji starou věc - generování náhodného kódu. Vytvořil jsem dle Andreje B. funkci, která takto normálně funguje:
function generateRandomCode(){
$letters = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z");
$numbers = array("1","2","3","4","5","6","7","8","9");
$combination = array($letters, $letters, $numbers, $letters, $numbers, $numbers, $letters, $numbers, $numbers, $numbers, $letters, $numbers);
$result = "";
foreach ($combination as $array) {
$result .= $array[array_rand($array)];
}
return $result ;
}Chtěl byc tuto fci zuniverzálnit a vložit možnost typu a počtu znaků přímo do funkce, tzn., že proměnná $combination by byla parametrem funkce. Můj pokus byl takovýto: function generateRandomCode($code = array()){
$letters = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z");
$numbers = array("1","2","3","4","5","6","7","8","9");
$combination = [];
foreach ($code as $characters) {
if($characters == 0){
$combination[] .= $letters;
}
if($characters == 1){
$combination[] .= $numbers;
}
}
$result = "";
foreach ($combination as $array) {
$result .= $array[array_rand($array)];
}
return $result ;
}Moje představa dosazení parametru do funkce byla 0 = písmeno, 1 = číslice: generateRandomCode(array(0, 1, 0, 1, 0, 0, 1)); Ale vrací mi to string :-( Warning: array_rand() expects parameter 1 to be array, string given in C:\wamp64\www\blahapet\blahapet\views\kontakt.php on line 47 Neřešte prosím bezpečnost této funkce (viz. konverzace výše), jen chci rozluštit oříšek, proč jsem takové tele... Díky moc ;-) |
||
| Str4wberry Profil |
#8 · Zasláno: 30. 12. 2024, 20:31:15
Problém bude asi v
$combination[] .= $letters;, kde se místo přidávání prvku do pole přidává řetězec. Takže možná jen vyhodit tu tečku.
|
||
| blahapet Profil |
#9 · Zasláno: 31. 12. 2024, 07:47:05
Tak to jsem netušil, že to mohlo být takovou prkotinou. Moc děkuji.
|
||
|
Časová prodleva: 1 rok
|
|||
0