2012-01-31 197 views
2

我有一个字符串,长20〜30个字符,包含大小写字母和数字什么是C#中字符串最快的冗余校验和?

我需要生成一个2个字符的校验和(在套管敏感的字母和数字,以及)

,并把它们放在一起进行一个唯一的ID

C#中计算校验和以进行验证的最快方法是什么?

+4

校验和通常*不是唯一的,当然,如果你想要一个32位整数,你将不会得到一个唯一的30个字符... – 2012-01-31 15:23:54

+3

...和2个char校验和是将有更高的碰撞概率:“区分大小写的字母和数字”会给你62个可能的字符(假设英文字母);其中两个字符可以使用62 * 62 = 3844个可能的组合 - 相当于稍小于12位的数字! – LukeH 2012-01-31 15:31:57

+0

所以如果我的字符串是25个字符,多少个字符额外的校验和是好的? 5^= 916 132 832,这是好的吗?但无论如何,CRC32可以吗?我读了crc32代码,看起来它给出了一个32位数字 – 2012-01-31 15:44:46

回答

1

你有三个问题:

  1. 快速校验和计算的字符串:的Adler32是足够好的分布为它的速度不够快。

  2. 转换校验到您的字符的字符串设定(区分大小写字母+数字):如果你可以添加+/字符,你可以很容易地使用的base64

  3. 生成不同于一个唯一的ID两个:这对于给定的方法来说是不可能的。因为对于相同的字符串,最终会得到相同的校验和,这不会有助于唯一性。

你可以做什么有使用全局计数器,如果您的项目组是有限的,每次递增它创建一个新的记录。

+0

我的意思是,我将生成一个唯一的长字符串,然后在最后添加校验和。所以我可以在做数据库检查之前做一个简单的校验和。我会看看Adler32,谢谢 – 2012-01-31 15:49:38