繁体   English   中英

使用客户信息生成唯一的ID

[英]Generate unique ID using customer information

我正在尝试设计一个系统,其中用户在不同实例之间应该是唯一的。

我有:

  • 名字
  • 电子邮件

我想使用这三个字段生成唯一的ID,以便可以使用该ID找出客户是否相同。 同样,如果重复组合,则系统应生成相同的ID。

有什么建议么? 用Java可能是个好方法。

完整的电子邮件应该已经是唯一的,因此单独的电子邮件应该很好。

如果要包括所有内容,则必须确保所有实例中都将包含所有字段,并以某种模式(如果需要,可以使用多个字符)将它们连接在一起,这些模式不会在字段中出现。

只要字段始终由该模式分隔并且没有用户将拥有相同的字段(对于所有字段),那么这些ID将始终是唯一且可重新创建的。

例如: email-firstname-lastname

注意:

您应确保定界符不会出现在字段中。 否则,这些场会相互渗出。

firstname="billy-bob", lastname="joe" -> email-billy-bob-joe

的ID与

firstname="billy", lastname="bob-joe" -> email-billy-bob-joe

您可以连接fName,lName和email并使用UUID.nameUUIDFromBytes(concat.getBytes()).toString()

例:

import java.util.UUID;

public class asd {

public static void main(String args[]) {
    String fName = "fName";
    String lName = "lName";
    String email = "email@gmail.com";
    String concat = fName+lName+email;
    String result = UUID.nameUUIDFromBytes(concat.getBytes()).toString();
    System.out.println(result);
  }
}

您可以使用任何哈希函数(例如SHA-1,MD-5等)从名字,姓氏和电子邮件中生成固定大小的哈希作为用户ID。 我建议在计算哈希值之前,使用一些定界符从所有属性中创建一个字符串。 并且可能将结果字符串标准化为大写/小写是个不错的选择。

        String delimiter = ..;
        String email = ..;
        String firstName = ..;
        String lastName = ..;
        String data = email + delimiter + firstName + delimiter + lastName;
        String userId = DigestUtils.sha1Hex(data.toLowerCase());

对于哈希计算,在此示例中,我采用了Apache Commons Codec

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM