我想根据客户名称和出生日期生成一个唯一的编号。
如果我的客户名是Chandra shekar,他的出生日期是28/12/1990
。
我想要xxxx-1990
xxxx
应该是一个应根据客户名称生成的数字。
如何从字符串值生成数字?
谢谢。
答案 0 :(得分:1)
如果您只需要从字符串生成数字,则可以使用GetHashCode():
var customerName = "John Smith";
var yourReferenceNumber = customerName.GetHashCode();
请注意,这并不能保证您的号码的唯一性。
答案 1 :(得分:1)
如果您需要能够立即保证唯一性,这很棘手。任何试图将字符串转换为“小”数字的方案(在信息方面总是小于原始字符串的方案)将始终遭受可能的冲突。
所以这真的取决于你的要求。如果您以后需要能够可靠地生成此ID,请在算法上提供名称和编号纯粹,否则您会遇到问题。
另一方面,如果您可以在某个表格中存储“姓名,出生日期,生成的ID”,那么您可以先使用某种形式的哈希(我建议不要使用GetHashCode
因为不能保证它会随着时间的推移保持稳定,但是一些常见的加密哈希应该没问题,然后在表格中查找结果。你也可以使用另一部分来获得独特性。例如,如果“Fred Blogs”的哈希值为1234,那么“Jim Smith”的哈希值也是如此,那么最终可能会得到:
Fred Blogs => 1234-0-1990
Jim Smith => 1234-1-1990
但话又说回来,如果你处于这种情况,你可以考虑只生成一个全球唯一的ID。在尝试解决这些问题之前,一切都要考虑完全要求。正如我所说,你应该放弃只是“一个独特的数字”的想法 - 由于pigeonhole principle而注定要注定。
正如Habib所提到的,您还需要考虑具有相同名称和出生日期的多个客户的可能性。
答案 2 :(得分:-1)
尝试使用像这样的代码
var yr = DateTime.Parse("28/12/1990" , new CultureInfo("en-US")).Year;
var custName = "Chandra shekar";
var result = custName + yr ;
Console.WriteLine(result);
希望它会对你有所帮助。