独特的密钥生成逻辑

时间:2012-03-25 12:56:41

标签: php python mysql

由于缺乏更好的术语,我打算建立一个多用户客户关系管理器(CRM),我想创建一个易于通过电子邮件,文本和口头方式传输给其他团队成员的唯一标识符

例如:

我上传了100个客户的列表,John Smith和他的电话号码都包含在该列表中。上传后,我想在数据库中为John Smith生成一个隐藏的指纹/唯一标识符,然后传播一个可以公开共享的12位数字。

在我看来像这样 - 约翰·史密斯+ ph:5557898095 =指纹:7e013d7962800374e6e67dd502f2d7c0显示给最终用户ID号:103457843983

我的问题是 - 我应该使用哪种方法或流程来获取姓名和电话号码,生成隐藏密钥,然后转换为与隐藏密钥相关联的可显示密钥?

我希望这清楚。我主要想要使用正确的逻辑过程。

3 个答案:

答案 0 :(得分:2)

您可以使用crc32('fingerprint')作为最终用户ID号:

<?php 
  echo printf("%u", crc32('7e013d7962800374e6e67dd502f2d7c0')); //226407465310
?>

答案 1 :(得分:1)

我不明白你的问题究竟是什么,但我会尝试。

看起来你的意思是这样的:

一个sql表,它保存公共和私有id(以及其他东西)。

您可以生成如下键:

$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);
}

在此示例中,生成了两个密钥,并检查密钥是否已存在。 (在表“keys”中的示例中)。

(抱歉我的英语不好)。

答案 2 :(得分:0)

假设您的真实身份证是您的客户表中的auto_incremented字段,那么只需要第二个表将您的公共ID映射到真实ID。

假设您正在使用某种散列算法来生成公共ID,那么当您创建新用户以检测与现有用户的冲突时,在该表上执行查找是一个简单的过程,然后重新生成一个新的ID,直到没有冲突(例如,包括系统时间作为哈希输入的一部分,然后继续重新生成,直到找到唯一的ID)

相关问题