Skip to content

Instantly share code, notes, and snippets.

@bagart
Last active February 1, 2023 10:19
Show Gist options
  • Save bagart/ce991b0a7c4c85095cdadfbf650ef707 to your computer and use it in GitHub Desktop.
Save bagart/ce991b0a7c4c85095cdadfbf650ef707 to your computer and use it in GitHub Desktop.
md5_distribution.php
<?php
declare(strict_types=1);
function nulles($max)
{
$x = [];
for ($i = 1; $i < $max; ++$i) {
$md5 = md5((string)$i);
$cnt = 0;
for ($md_i = 0; $md_i < 32; ++$md_i) {
if ($md5[$md_i] !== '0') {
break;
}
++$cnt;
}
$x[$cnt] = 1 + ($x[$cnt] ?? 0);
}
return [$max => $x];
}
function raspred($x)
{
$result = [];
foreach ($x as $max => $res) {
foreach ($res as $zeros => $count) {
$result["от 1 до $max"]["md5 имеет $zeros нулей в начале"] = '1/' . round(
$max / $count,
3
) . ' или ' . round($count / $max * 100, 2) . '%';
}
}
return $result;
}
foreach (
[
5000,
10000,
50000,
100000,
500000,
1000000,
10000000,
] as $size
) {
var_dump(raspred(nulles($size)));
}
@bagart
Copy link
Author

bagart commented Feb 1, 2023

к вопросу о распределении байт в md5

https://habr.com/ru/company/vk/blog/711126/

https://3v4l.org/eRqbS#v8.1.15

array(1) {
  ["от 1 до 5000"]=>
  array(4) {
    ["md5 имеет 0 нулей в начале"]=>
    string(21) "1/1.072 или 93.26%"
    ["md5 имеет 1 нулей в начале"]=>
    string(21) "1/15.576 или 6.42%"
    ["md5 имеет 2 нулей в начале"]=>
    string(22) "1/384.615 или 0.26%"
    ["md5 имеет 3 нулей в начале"]=>
    string(19) "1/2500 или 0.04%"
  }
}
array(1) {
  ["от 1 до 10000"]=>
  array(5) {
    ["md5 имеет 0 нулей в начале"]=>
    string(21) "1/1.071 или 93.41%"
    ["md5 имеет 1 нулей в начале"]=>
    string(21) "1/15.949 или 6.27%"
    ["md5 имеет 2 нулей в начале"]=>
    string(22) "1/384.615 или 0.26%"
    ["md5 имеет 3 нулей в начале"]=>
    string(19) "1/2500 или 0.04%"
    ["md5 имеет 4 нулей в начале"]=>
    string(20) "1/10000 или 0.01%"
  }
}
array(1) {
  ["от 1 до 50000"]=>
  array(5) {
    ["md5 имеет 0 нулей в начале"]=>
    string(21) "1/1.068 или 93.59%"
    ["md5 имеет 1 нулей в начале"]=>
    string(21) "1/16.589 или 6.03%"
    ["md5 имеет 2 нулей в начале"]=>
    string(22) "1/287.356 или 0.35%"
    ["md5 имеет 3 нулей в начале"]=>
    string(23) "1/3571.429 или 0.03%"
    ["md5 имеет 4 нулей в начале"]=>
    string(17) "1/50000 или 0%"
  }
}
array(1) {
  ["от 1 до 100000"]=>
  array(5) {
    ["md5 имеет 0 нулей в начале"]=>
    string(21) "1/1.069 или 93.58%"
    ["md5 имеет 1 нулей в начале"]=>
    string(20) "1/16.54 или 6.05%"
    ["md5 имеет 2 нулей в начале"]=>
    string(22) "1/286.533 или 0.35%"
    ["md5 имеет 3 нулей в начале"]=>
    string(19) "1/5000 или 0.02%"
    ["md5 имеет 4 нулей в начале"]=>
    string(17) "1/50000 или 0%"
  }
}
array(1) {
  ["от 1 до 500000"]=>
  array(5) {
    ["md5 имеет 0 нулей в начале"]=>
    string(21) "1/1.068 или 93.67%"
    ["md5 имеет 1 нулей в начале"]=>
    string(21) "1/16.855 или 5.93%"
    ["md5 имеет 2 нулей в начале"]=>
    string(22) "1/269.833 или 0.37%"
    ["md5 имеет 3 нулей в начале"]=>
    string(23) "1/4385.965 или 0.02%"
    ["md5 имеет 4 нулей в начале"]=>
    string(21) "1/83333.333 или 0%"
  }
}
array(1) {
  ["от 1 до 1000000"]=>
  array(5) {
    ["md5 имеет 0 нулей в начале"]=>
    string(21) "1/1.067 или 93.68%"
    ["md5 имеет 1 нулей в начале"]=>
    string(21) "1/16.862 или 5.93%"
    ["md5 имеет 2 нулей в начале"]=>
    string(22) "1/273.973 или 0.37%"
    ["md5 имеет 3 нулей в начале"]=>
    string(23) "1/4651.163 или 0.02%"
    ["md5 имеет 4 нулей в начале"]=>
    string(21) "1/76923.077 или 0%"
  }
}
array(1) {
  ["от 1 до 10000000"]=>
  array(6) {
    ["md5 имеет 0 нулей в начале"]=>
    string(21) "1/1.067 или 93.75%"
    ["md5 имеет 1 нулей в начале"]=>
    string(21) "1/17.045 или 5.87%"
    ["md5 имеет 2 нулей в начале"]=>
    string(22) "1/275.186 или 0.36%"
    ["md5 имеет 3 нулей в начале"]=>
    string(23) "1/4436.557 или 0.02%"
    ["md5 имеет 4 нулей в начале"]=>
    string(20) "1/59523.81 или 0%"
    ["md5 имеет 5 нулей в начале"]=>
    string(19) "1/2000000 или 0%"
  }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment