唯一密钥生成逻辑
Posted
技术标签:
【中文标题】唯一密钥生成逻辑【英文标题】:Unique Key Generation Logic 【发布时间】:2012-04-09 06:10:15 【问题描述】:由于没有更好的术语,我计划构建一个多用户客户关系经理 (CRM),我想创建一个唯一标识符,该标识符易于通过电子邮件、文本和口头传输给其他团队成员.
例如:
我上传了我的 100 位客户列表,John Smith 和他的电话号码包含在该列表中。上传后,我想在数据库中为 John Smith 生成一个隐藏的指纹/唯一标识符,然后传播一个可以公开共享的 12 位数字。
在我看来是这样的 - john smith + ph: 5557898095 = 指纹:7e013d7962800374e6e67dd502f2d7c0 显示到最终用户 ID 号:103457843983
我的问题是 - 我应该使用什么方法或过程来获取姓名和电话号码,生成隐藏密钥,然后转换为链接到隐藏密钥的可显示密钥?
我希望这清楚。我主要是想用正确的逻辑流程。
【问题讨论】:
您真的要根据电话号码来识别 ID 吗?如果客户的电话号码发生变化怎么办? 为什么需要这个?当一个简单的整数 id(由 mysql 自动生成)服务器时,似乎需要付出很多努力 - 比任何任意 12 位数字更具人类可读性,并且作为数据库索引键更好。 【参考方案1】:您可以使用 crc32('fingerprint') 作为最终用户 ID 号:
<?php
echo printf("%u", crc32('7e013d7962800374e6e67dd502f2d7c0')); //226407465310
?>
【讨论】:
【参考方案2】:我不明白你的问题到底是什么,但我会试试。
你的意思好像是这样的:
一个保存公共和私有 ID(可能还有其他东西)的 SQL 表。
您可以像这样生成密钥:
$chars = '0123456789abcedfghijklmnopqrstuvwxyz';
function generateKey($length, $charsLength = 10)
global $chars;
$key = '';
for($i=0;$i<$length;++$i)
$key .= $chars[rand(0, $charsLength - 1)];
return $key;
$keyPublic = generateKey(10); // Public key with length 10
// Now check if the key already exist
while(mysql_num_rows(mysql_select('SELECT publicKey FROM keys WHERE publicKey = \''.$keyPublic.'\')) === 1)
$keyPublic = generateKey(10);
$keyPrivate = generateKey(10, 36); // Private key with length 10
// Now check if the key already exist
while(mysql_num_rows(mysql_select('SELECT privateKey FROM keys WHERE privateKey = \''.$keyPrivate.'\')) === 1)
$keyPrivate = generateKey(10, 36);
在此示例中,生成了两个密钥,并检查密钥是否已存在。 (在“键”表中的示例中)。
【讨论】:
谢谢 - 这为我需要完成的工作提供了正确的方向:)【参考方案3】:假设您的真实 ID 是您客户表中的 auto_incremented 字段,那么只需有第二个表将您的公共 ID 映射到真实 ID。
假设您使用某种散列算法来生成您的公共 ID,当您创建新用户以检测与现有用户的冲突然后重新生成时,在该表上进行查找将是一个简单的过程一个新的 ID,直到没有冲突(例如,将系统时间作为哈希输入的一部分,然后继续重新生成,直到找到唯一的 ID)
【讨论】:
也很有帮助,谢谢。我知道我的问题有点含糊,但在你和@user1150525 之间,我现在有完成我的规范文档所需的东西。谢谢!以上是关于唯一密钥生成逻辑的主要内容,如果未能解决你的问题,请参考以下文章