【问题标题】: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 位数字更具人类可读性,并且作为数据库索引键更好。

标签: php python mysql


【解决方案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 之间,我现在有完成我的规范文档所需的东西。谢谢!
    猜你喜欢
    • 2010-09-08
    • 2023-04-04
    • 2019-07-25
    • 2013-07-18
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多