У меня есть таблица SQL, в которой хранятся уникальные данные nvarchar с набором 60 символов макс.
Теперь мне нужно выводить каждое значение в файл ежедневно. Этот файл затем подается в стороннюю систему.
Однако эта сторонняя система требует, чтобы значение было ограничено 10 символами . Значения не обязательно должны быть такими, как в таблице. Они просто должны быть уникальными и максимум 10 символов. Они также должны быть согласованы в том, что один и тот же уникальный идентификатор используется каждый день для табличного значения.
Я не могу обрезать строку, поскольку она может потерять свою уникальность.
Глядя на мои варианты, я мог бы:
- Использовать GetHashCode ()
- Преобразовать в шестнадцатеричный
С GetHashCode это выглядит простым и простым вариантом, и я получаю одно и то же значение при каждом его запуске. Тем не менее, документация Microsoft рекомендует не использовать его для моих целей ...
https://docs.microsoft.com/en-us/dotnet/api/system.string.gethashcode?redirectedfrom=MSDN&view=netframework-4.8#System_String_GetHashCode
В результате хеш-коды никогда не должны использоваться за пределами области приложения, в которой они были созданы, они никогда не должны использоваться в качестве ключевых полей в коллекции, и их никогда не следует сохранять.
С шестнадцатеричным преобразованием, он также может потерять уникальность при усечении до 10 символов.
Я также посмотрел этот пример, но опять же я не уверен, насколько он надежен с уникальностью: Быстрая хеш-функция для строки в C #
static UInt64 CalculateHash(string read)
{
UInt64 hashedValue = 3074457345618258791ul;
for(int i=0; i<read.Length; i++)
{
hashedValue += read[i];
hashedValue *= 3074457345618258799ul;
}
return hashedValue;
}
Есть ли другие доступные мне варианты?