使用客户信息生成唯一ID

时间:2018-04-05 18:02:44

标签: java hash uuid

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

我有:

  • 名字
  • 姓氏
  • 电子邮件

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

有什么建议吗?什么是Java的好方法。

3 个答案:

答案 0 :(得分:4)

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

如果要包含all,则必须确保所有实例都包含所有字段,并将它们与某些模式(如果需要,多个字符)连接起来,这些模式不会出现在字段中。

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

例如:email-firstname-lastname

注意:

您应该确保分隔符不会出现在字段中。否则这些字段会相互渗透。

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

具有相同的ID

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

答案 1 :(得分:2)

您可以连接fName,lName和电子邮件并使用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);
  }
}

答案 2 :(得分:-1)

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

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

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