簡體   English   中英

如何在PHP中生成非常獨特的ID

[英]How to generate very unique id in PHP

我正在使用自制許可證生成器,並且想使用uniqid函數生成一些許可證字符串

我已經可以生成一些ID,但是由於要避免它們被截斷,所以第一部分總是一樣,因此我想再次檢查生成的ID是否已存在於數據庫中。

我是php的新手,因此非常感謝您幫助創建此功能

我已經做到了:

substr(uniqid($lic_key_prefix, true), 7);

我想要一個以遞歸方式查看數據庫的函數,直到它為我的數據庫項找到一個非常唯一的id。

有人暗示嗎?

如果您只是想阻止人們猜測下一個ID或從uniqid()的輸出中學習特定模式,則將其截斷不是一個好主意。 之前我不得不做類似的事情,然后定居在Hashids 它根據您提供的任何整數生成雙向哈希,並且輸出字符串與其他字符串完全無關,除非知道秘密字符串,否則無法根據當前值確定下一個值。

// Include necessary files:
require_once('lib/Hashids/HashGenerator.php');
require_once('lib/Hashids/Hashids.php');

// First you set a secret string. Change this to whatever you want.
$secret = 'my_secret_string';

// Then create a hash starting with 2 characters for the first one.
// This will get longer as the id increases.
$hashids = new Hashids\Hashids($secret, 2);
// Create the first 20 hashes based on IDs 0 to 19
for ($i=0; $i<20; $i++) {
    echo $hashids->encode($i) . "\n";
}

// Or if you want each hash to be a minimum of 32 characters:
$hashids = new Hashids\Hashids($secret, 32);
for ($i=0; $i<20; $i++) {
    echo $hashids->encode($i) . "\n";
}

這是上面的輸出:

Yb
JE
oZ
n1
OX
QO
vx
X4
xP
k8
Wx
V9
mz
DL
wA
Eo
4B
1Z
8W
zE
eXZ9L0gO1Bvwx7qYblQbop5VAzDRn2M3
e8RWd7PjMQZGbLaJElmkAyEJn5gY2zDV
QKJMW3XEZ1vzgjqoZNA6G9xmpO8rV0nP
RE3p0moweBK1XAqn1NvG4bjnMD5Z89kV
rKEvgR5Y2djmp7aOXNnbzO8xXQVe0WMB
zeLmYjv0AG3MK7lQON1QopRJODB5w48E
8WoLRyJngvZY63Nvxlwp7ed5MrPVBm4j
EOvxdnV3kB9jP2aX4am5bGyXRwzLo4ZD
YrAvRL7dKV4WxQNxPN1bM3yXog58D9BJ
yJ3WQ6ZR1Bk75eNk8q0mPb8K4dxwMYGA
OVbKy1GBmzpewXqWxlARP02M57nx43Zk
vDxbYGWOJyQ5rmqV9NLoBez6137VPEXR
Qwn6LPjx8g0XzBqmzlbde7EW2RrpkGKM
Gzk5MRXm78JQ1rqDLqY0Kx2go4dnB3Ee
V0p7Z2QwjdeY5RqwAazMWvJPnokKAb1D
BAYjp5DOJnVKgXNEolkGMQx7Rm2weor6
OXrPA8VRJkzvbWN4BlnG4QBeDxM15L0K
r7QEdMoJW8Gzgxl1Za12eK4vOYLR5Vb9
57ZVbnWOjQJGdBl8WqXYL8w61Ey2Kxp4
omOyWjPJ71Dk30qzENBZY26Mr9dAVgbE

當然,您可以將任何哈希解碼回規則的整數。 因此,您要做的就是將數據庫中的ID傳遞給此函數,並將其提供給客戶端。 然后,當客戶端為您提供哈希值時,您將其放入解碼方法中並獲取實際ID。 這樣,您就不必擔心如果截斷的uniqid已經存在,則嘗試進行多個查詢,因為哈希值保證是唯一的。

您可以在數據庫的id字段中添加一個唯一鍵,然后在插入時檢查是否成功。 如果不是,請更改唯一ID,然后再次插入。 將其循環,直到成功。 這樣可以保證每個id都是唯一的。

在查看了Hashids之后,我似乎在GitHub中找不到HashGenerator.php文件。 Hashids.php存在,但其他文件不存在,並且需要您查看上面的包含,這是必需的。 我希望我可以不使用作曲家就將其放入我的項目中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM