Количество различных строк, которые я могу получить, используя произвольную строку PHP shuffle - PullRequest
4 голосов
/ 01 января 2012

В настоящее время у меня работает веб-сайт для сокращения URL-адресов, который называется http://nn.pe, и использую случайный хэш из 6 символов с этим кодом,

$charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    return substr(str_shuffle($charset), 0, 6);

Мне было интересно, сколько разных строк используется с этими символами и целыми числами?

Тебе не нужно быть точным, я думаю, с точностью до миллиона.

Ответы [ 5 ]

3 голосов
/ 01 января 2012

Если тасование является надлежащим тасованием, таким как Фишер Йейтс, у вас есть (26 * 2 + 10)! / (26 * 2 + 10-6)! = 62! / 56! = 44,261,653,680 Возможности, потому что у нас нет замены.

3 голосов
/ 01 января 2012

Предупреждение

Я только что посмотрел в исходном тексте PHP 5.3.8.php_rand() используется.Это эквивалент C rand().Я был бы очень осторожен с str_shuffle !!Это (обычно) даст вам столько же возможностей, сколько и getrandmax() выходных данных, что может быть 32 768 в Windows.

В большинстве систем теоретический максимум составляет 2,1 млрд.

3 голосов
/ 01 января 2012

62^6 = 56,800,235,584

В [a-zA-Z0-9] есть 62 комбинации из 6-ти символьного хэша.

1 голос
/ 01 января 2012

Пятьдесят шесть миллиардов восемьсот миллионов.

Для каждой из указанных позиций в хэше у вас есть 26 + 26 + 10 вариантов. Это дает вам 62 ^ 6 возможных строк. 62 ^ 6 = 56 800 235 584.

0 голосов
/ 01 января 2012

62^6 = 56,800,235,584 комбинаций.

Однако вы должны контролировать столкновения.

...