0

我想根据客户姓名和出生日期生成一个唯一编号。

如果我的客户姓名是 Chandra shekar,他的出生日期是28/12/1990.

我想要类似的东西 xxxx-1990

xxxx应该是一个应该根据客户名称生成的数字。

如何从字符串值生成数字?

谢谢你。

4

3 回答 3

1

如果您只需要从字符串生成数字,则可以使用GetHashCode()

var customerName = "John Smith";
var yourReferenceNumber = customerName.GetHashCode();

但是请注意,这并不能保证您的号码的唯一性。

于 2013-04-18T05:49:41.517 回答
1

如果您需要能够立即保证唯一性,这很棘手。任何试图将字符串转换为“小”数(在信息方面总是比原始字符串小)的方案总是会遇到可能的冲突。

所以这真的取决于你的要求。如果您以后需要能够可靠地生成此 ID,然后纯粹通过算法提供名称和编号,那么您就有问题了。

另一方面,如果您可以将“姓名、出生日期、生成的 ID”存储在某处的表中,那么您可以从使用某种形式的哈希开始(我不建议使用GetHashCode,因为不能保证它会保留随着时间的推移稳定,但一些常见的加密哈希应该没问题)然后在表中查找结果。您也可以使用另一部分来实现唯一性。例如,如果“Fred Blogs”的哈希值是 1234,“Jim Smith”的哈希值也是如此,你可能会得到:

Fred Blogs => 1234-0-1990
Jim Smith =>  1234-1-1990

但话又说回来,如果您处于这种情况,您可以考虑只生成一个全局唯一 ID。这一切都是为了在您尝试解决它们之前制定确切的要求。正如我所说,您应该放弃“唯一的数字”的想法 - 由于鸽子原则,这是注定要失败的。

正如 Habib 提到的,您还需要考虑多个客户具有相同姓名和出生日期的可能性。

于 2013-04-18T05:58:29.367 回答
-1

尝试使用这样的代码

var yr = DateTime.Parse("28/12/1990" , new CultureInfo("en-US")).Year;
var custName = "Chandra shekar";
var result = custName + yr ;
Console.WriteLine(result);

希望它会帮助你。

于 2013-04-18T05:58:12.247 回答