
Генерация последовательности уникальных кодов на PHP
Иногда возникает задача генерации последовательности уникальных кодов по определенному формату. Это могут быть какие-нибудь одноразовые токены, коды лотерейных билетов, серийные номера, scratch-карты, да мало ли чего. Простое использование ГСЧ в этом случае не дает 100% гарантии, так как выдаваемые им значения могут повторяться, а при большом количестве кодов количество повторений будет только расти. Предлагаю вам следующее решение:Code (PHP) : Убрать нумерацию
- // Набор символов для генерации кодов
- $str='1234567890ABCDEF';
- // Длина кода без учета разделителей
- $code_length=16;
- // Нужное количество кодов
- $codes_count=300000;
- // Позиции разделителя (0 - не надо)
- $code_separartor=4;
- $tmp=array();
- $str_length=strlen($str)-1;
- // Цикл до заполнения массива
- while (count($tmp)<$codes_count) {
- // Сгенерировать индекс массива
- $code='';
- for ($i=0; $i<$code_length; $i++){
- // Разделитель можно не добавлять
- if ($i>0 && $code_separartor>0 && $i%$code_separartor==0) { $code.='-';}
- $code.=substr($str, mt_rand(0,$str_length), 1);
- }
- // Или в массив добавится новый элемент, или
- // перепишется поверх уже имеющийся
- $tmp[$code]=1;
- }
- // Теперь в массиве $codes уникальные коды
- $codes=array_keys($tmp);