在我的表中,我插入了用户的新记录(新用户)。我有一个int设置为字段主键。我想要的是使这个id安全。因为这个id公开给大家。任何用户或人都可以看到此ID。
如果我生成的id是这样的:
0000000001
...
0000000023
...
0000000157
...
其他人很容易猜到它,因为ID的顺序是增加1.相反,我想在一个单独的字段中存储一个“公共”id,这是该auto_increment主id的aplhanumeric表示。
所以在数据库中,表格将是这样的:
id------------------public_id
---------------------------------
0000000001 -------- W3UB3VNAU3222
0000000002 -------- 7BNXYO28CN2KK
我考虑过使用哈希。但哈希是40或更高的固定长度。但我希望公共ID的长度固定为10个字符。应该是唯一的,如果可能的话,我更喜欢从id
请告诉我们如何创建这个?任何帮助我这样做的内置函数?
我通过hash()
了解了crc32
function:http://www.php.net/manual/en/function.hash.php#104987它将提供8个char长度哈希值。它将来会发生冲突吗?
测试:
echo hash('crc32', '0000000001'); // gives 6c13f76e
答案 0 :(得分:0)
以下代码示例生成一个包含1位数的10个字符长的随机字符串:
<?php
function random_string( )
{
$character_set_array = array( );
$character_set_array[ ] = array( 'count' => 10, 'characters' => 'abcdefghijklmnopqrstuvwxyz' );
$character_set_array[ ] = array( 'count' => 1, 'characters' => '0123456789' ); //you can change count
$temp_array = array( );
foreach ( $character_set_array as $character_set )
{
for ( $i = 0; $i < $character_set[ 'count' ]; $i++ )
{
$temp_array[ ] = $character_set[ 'characters' ][ rand( 0, strlen( $character_set[ 'characters' ] ) - 1 ) ];
}
}
shuffle( $temp_array );
return implode( '', $temp_array );
}
?>
答案 1 :(得分:0)
试试这个
MySql auto-incrementing Alpha-numeric primary key?
CREATE TABLE myItems (
id INT NOT NULL AUTO_INCREMENT,
prefix CHAR(30) NOT NULL,
PRIMARY KEY (id, prefix),
或者
composite (alphanumeric) primary key and auto increment
public function random_id_gen($length)
{
//the characters you want in your id
$characters = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
$max = strlen($characters) - 1;
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= $characters[mt_rand(0, $max)];
}
return $string;
}
答案 2 :(得分:0)
您可以尝试从原始ID中随机播放字符和XOR。
答案 3 :(得分:0)
生成哈希并取前10个字母。
检查数据库中是否已存在此类ID。 如果不是,您可以将其作为您的ID,否则生成新哈希并重试。
如果您想表示您的真实身份证,您可以选择一个分隔符,并将您的身份证号码映射到信件。
示例:
ID: ...0000021
PUBLIC_ID : ...Hd3dXBA
X是用于将映射的ID与随机生成的部分分开的分隔符。
2映射到B
1映射到A
答案 4 :(得分:0)
没有内置功能可以为你做到这一点,所以我担心你必须自己建一个。如果您不受10个字符要求的限制,请查看UUID。这篇文章:PHP function to generate v4 UUID将解释如何创建一个将在PHP中生成UUID的PHP函数。
否则尝试沿着这些行的功能,尽管每次生成时都必须检查id是否是唯一的。
function generateID()
{
$capital_letters = range("A", "Z");
$lowcase_letters = range("a", "z");
$numbers = range(0, 9);
$all = array_merge($capital_letters, $lowcase_letters, $numbers);
$count = count($all);
$id = "";
for($i = 0; $i < 10; $i++)
{
$key = rand(0, $count);
$id .= $all[$key];
}
if(!uniqueId($id))
{
return generateID();
}
return $id;
}