PHP代码为数据库生成随机ID号


PHP Code to generate random ID number for database

这里是为那些精通PHP和MYSQL的人准备的。

我正在寻找一种方法来生成唯一的,但随机长编号id为每个进入数据库的条目。

我不希望它以通常的

开头

我想要长一点的。有人知道任何简单的函数或代码片段,将实现这一点吗?

您可以更改表的PRIMARY KEYAUTO_INCREMENT种子,以获得初始更大的数字。

CREATE TABLE example (
  nid INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50)
) AUTO_INCREMENT = 200000;

在表中插入一行时为nid生成的下一个值将是200001

要更改现有表的AUTO_INCREMENT种子,可以使用:

ALTER TABLE example AUTO_INCREMENT = 200000;

use function UUID();

你可以在

上阅读更多http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html

mysql> SELECT UUID();
    -> '6ccd780c-baba-1026-9564-0040f4311e29'

UUID是由5个十六进制数组成的utf8字符串表示的128位数字,格式为aaaaaaaaaa -bbbb-cccc-dddd- eeeeeeeeeeeeee

对于随机数使用RAND()

SELECT (FLOOR( 1 + RAND( ) *10000 ))

使用random.org生成您的随机数

在php中生成真正的随机数几乎是不可能的。在足够大的样本中,缺陷是明显的,因为PHP使用伪随机数生成器来处理rand()等 http://www.random.org/randomness/

您可以使用curl生成和调用您的随机数

是在插入,还是更新一个现有的表?

假设对于插入,可以使用这样的代码

INSERT INTO someTable (aField, aNotherField, SomeNumber)
SELECT 'aFieldValue', 'aNotherField', aNum
FROM (SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum) Sub1
LEFT JOIN someTable ON Sub1.aNum = someTable.SomeNumber
WHERE someTable.SomeNumber IS NULL
LIMIT 1

生成100000到999999之间的10个随机数,并选择一个还没有被使用过的。

这是一种非常糟糕的方法,并且有一个明显的主要缺陷,即生成的所有10个数字都可能已经被使用过了。

我倾向于认为对随机数的需求是可以避免的。

这是唯一的:

$uniqueValue = uniqid('', true)