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