Создать повторно используемый уникальный код для строкового значения - PullRequest
1 голос
/ 08 мая 2019

У меня есть таблица SQL, в которой хранятся уникальные данные nvarchar с набором 60 символов макс.

Теперь мне нужно выводить каждое значение в файл ежедневно. Этот файл затем подается в стороннюю систему.

Однако эта сторонняя система требует, чтобы значение было ограничено 10 символами . Значения не обязательно должны быть такими, как в таблице. Они просто должны быть уникальными и максимум 10 символов. Они также должны быть согласованы в том, что один и тот же уникальный идентификатор используется каждый день для табличного значения.

Я не могу обрезать строку, поскольку она может потерять свою уникальность.

Глядя на мои варианты, я мог бы:

  1. Использовать GetHashCode ()
  2. Преобразовать в шестнадцатеричный

С 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;
}

Есть ли другие доступные мне варианты?

1 Ответ

0 голосов
/ 08 мая 2019

Добавьте уникальный ключ Identity в свою таблицу и позвольте SQL Server управлять приращением за вас.Это может быть заполнено большим числом при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...