Я пытаюсь создать ссылочные номера для клиентов и заказов на основе this answer со следующими требованиями:Использование uniqid() для ссылочного номера клиента
- Все номера
- Unique (, насколько это возможно без проверки база данных)
- Та же длина
- Клиенты начинают с 10
- Заказы начинаются с 20
Вот мой текущий код для исх клиента:
$ref = uniqid();
$decimalRef = hexdec($ref);
$finalRef = 10 . $decimalRef;
Является ли это хорошее решение? Я беспокоюсь о уникальности и не уверен, что они всегда будут одинаковой длины.
Update
Я не хочу использовать значение автоматической базы данных приращения, потому что я не хочу писать в базу данных заранее, и я не хочу, чтобы мои клиенты, зная, что мой номер клиента 2. По понятным причинам.
Update 2
Если бы я должен был использовать значение автоматического приращения базы данных, как я затем преобразовать это в более подходящий клиент сталкивается числа в соответствии с требованиями (такой же длины, начиная с 10). Если у меня всего 4 заказа в системе, я не хочу объявлять об этом своим пользователям.
Если вы используете базу данных, что случилось с простым инкрементным идентификатором? –
Мне нужно сначала создать ссылку, чтобы отправить ее на платежный шлюз, если платеж будет успешным, тогда я сохраню его в БД.Кроме того, клиент обращается к ссылке, я не хочу, чтобы мои клиенты думали, что они являются номером клиента. – paul
Вы всегда можете создать запись в базе данных, и если платеж не удастся, то снова удалите его; но uniqid() не является хорошим способом создания уникальных значений - вам нужно будет сделать чтение базы данных, чтобы узнать, было ли это значение уже выделено клиенту, и, при необходимости, восстановить идентификатор –