$start = time();
$count = 100000;
$sol = 'MMMddFF';
$last = $start;
$s = substr(md5($start.$sol), 32-3);
echo('Last: '.$s.' at '.$start);
for ($i=$start+1; $i<$start+$count; $i++) {
$cs = substr(md5($i.$sol), 32-3);
if ($s == $cs) {
echo(', '.$i.' ('.($i-$last).')');
$last = $i;
}
}
Вывод (при каждом запуске будет разный):
Last: 28e at 1465555315, 1465556570 (1255), 1465560504 (3934), 1465564842 (4338), 1465566966 (2124), 1465573478 (6512), 1465578452 (4974), 1465583075 (4623), 1465584411 (1336), 1465584970 (559), 1465584979 (9), 1465587163 (2184), 1465588138 (975), 1465588785 (647), 1465590518 (1733), 1465591232 (714), 1465593084 (1852), 1465594658 (1574), 1465595547 (889), 1465598000 (2453), 1465598371 (371), 1465604641 (6270), 1465604940 (299), 1465606505 (1565), 1465614302 (7797), 1465614573 (271), 1465615261 (688), 1465617863 (2602), 1465621976 (4113), 1465625562 (3586), 1465634715 (9153), 1465637881 (3166), 1465638949 (1068), 1465644427 (5478), 1465646584 (2157), 1465652096 (5512), 1465653125 (1029)
Частоту повторений можно прикинуть.
Число комбинаций из 3х символов md5 - 16^3 = 4096, что есть в среднем каждые 4096 единиц будет повторение.
Повторю - в среднем, без гарантии.
Каждый символ md5 - это 0...9 + a...f итого 16 вариантов.
Комбинаций из трех таких символов - 16 в степени 3 - это азы комбинаторики.
То есть у нас всего 4096 возможных концовок md5.
md5() в среднем дает статистически непредсказуемое (читайте - случайное) значение.
Значит шанс получить заданную последовательно - 1/4096, что дает повторение через (в среднем) 4096.
PS. В данном случае совершенно не имеет значения откуда брать эти 3 символп - с конца, с начала, с середины, даже с произвольного места каждый раз и даже если эти три символа брать из разных случайных позиций - результат один - 4096 вариантов, псевдослучайное распределение, повторение в среднем через 4096.