Autor | Zpráva | ||
---|---|---|---|
Začátečník Profil * |
#1 · Zasláno: 11. 11. 2011, 03:10:27
Ahoj, tady jsem našel funkci na generování hesel, ne že bych ji potřeboval ale zaujal mě v kódu jeden řádek
Kód function generpassword($length=45,$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'){ $numChars = strlen($chars); $r = ''; for ($i = 0; $i < $length; $i++) { $r .= substr($chars, mt_rand(1, $numChars) - 1, 1); } return $r; } na tomto řádku mi není jasne, proč programátor odečítá hodnotu 1 ve funkci mt_rand, napadá někoho něco? $r .= substr($chars, mt_rand(1, $numChars) - 1, 1); Zdroj zde: http://www.accessdenied.cz/php/generovani-hesel-v-php |
||
Bertram Profil |
#2 · Zasláno: 11. 11. 2011, 06:45:28
Ahoj, představ si situaci kdy mt_rand() vygeneruje horní mez počtu znaků $chars.
Potom by jsi po funkci substr() chtěl ať ti vrátí jeden znak za posledním znakem, nacož by vrátila false. První znak je ošetřen generováním funkce md_rand() od jedničky kdy po odečtení jedničky funkci substr() jako první argument předáš nulu a ta vrací první znak. |
||
TomasJ Profil |
#3 · Zasláno: 11. 11. 2011, 06:47:54 · Upravil/a: TomasJ
Protože když použiješ strlen() nějakého řetězce, získáš počet znaků. Když chceš z řetězce nějaký znak, počítá 1. znak jako 0... To znamená, že $chars[0] == "a" a $chars[$strlen($chars)] už se nerovná žádnému znaku. Když odečteš 1 z toho $numChars, pak se $chars[$numChars] == "0" :)
$retezec = "abcd"; //4 znaky - a=0,b=1,c=2,d=3 $len = strlen($retezec); //vyjde 4 echo $retezec[0]; //0 = 1. pozice - znak "a" echo $retezec[$len]; //nevypíše žádný znak, protože na 4. pozici už žádný není. echo $retezec[$len-1]; //vypíše znak "d" Snad jsem to vysvětlil srozumitelně ;) EDIT: Jak říká Bertram - já to jen nenapsal tak odborně :) |
||
Časová prodleva: 13 let
|
0