Какова самая быстрая контрольная сумма избыточности в С# для строки?

У меня есть строка длиной 20-30 символов, содержащая буквы и цифры с учетом регистра.

Мне нужно сгенерировать двухсимвольную контрольную сумму (в том числе и в чувствительных буквах и цифрах)

и собрать их вместе для уникального идентификатора

Каков самый быстрый метод в С# для вычисления контрольной суммы для проверки?


person Eric Yin    schedule 31.01.2012    source источник
comment
Контрольные суммы, как правило, не являются уникальными, и, конечно, если вам нужно 32-битное целое число, вы не получите уникальное значение для 30 символов...   -  person Jon Skeet    schedule 31.01.2012
comment
... и двухсимвольная контрольная сумма будет иметь еще более высокую вероятность столкновения: чувствительные к регистру буквы и цифры дадут вам 62 возможных символа (при условии английского алфавита); два из этих символов обеспечивают 62 * 62 = 3844 возможных комбинации, что эквивалентно чуть меньшему, чем 12-битное число!   -  person LukeH    schedule 31.01.2012
comment
поэтому, если моя строка состоит из 25 символов, сколько дополнительных символов в контрольной сумме подходит? 5^=916 132 832, это хорошо? но в любом случае, CRC32 подходит для этого? Я прочитал код crc32, кажется, он дает 32-битное число   -  person Eric Yin    schedule 31.01.2012
comment
Вы можете представить 5 бит одним символом, используя свою кодировку. Чтобы представить полную 32-битную контрольную сумму, вам нужно 7 дополнительных символов.   -  person Sedat Kapanoglu    schedule 31.01.2012


Ответы (1)


У вас три проблемы:

  1. Быстрый расчет контрольной суммы для строки: Adler32 достаточно быстр с достаточно хорошим для его скорости распределением.

  2. Преобразование контрольной суммы в строку вашего набора символов (буквы с учетом регистра + цифры): если бы вы могли добавить символы + и /, вы могли бы легко использовать base64

  3. Создание уникального идентификатора из этих двух: это просто невозможно с данным методом. Потому что вы получите одну и ту же контрольную сумму для одной и той же строки, что не способствует уникальности.

Что вы можете сделать, так это использовать глобальный счетчик, если ваш набор элементов ограничен, и увеличивать его каждый раз, когда вы создаете новую запись.

person Sedat Kapanoglu    schedule 31.01.2012
comment
Я имею в виду, что я создам уникальную длинную строку, а затем добавлю контрольную сумму в конце. Поэтому я могу сделать простую контрольную сумму перед проверкой базы данных. Adler32 посмотрю, спасибо - person Eric Yin; 31.01.2012