我正在尝试设计一个系统,其中用户在不同实例中应该是唯一的。
我有:
我想使用这三个字段生成唯一ID ,以便可以使用该ID来确定客户是否相同。此外,如果重复组合,系统应生成相同的ID。
有什么建议吗?什么是Java的好方法。
答案 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。