Изменение размера уникального идентификатора с минимальным изменением кода

Я хочу изменить программное приложение. В приложении мы используем 10-значный уникальный идентификатор для идентификации каждого пользователя. Кроме того, 10-значное число имеет встроенное значение. Например, первые 2 цифры представляют страну, из которой пользователь, третья цифра представляет филиал, 4-ая,5-ая,6-ая цифры представляют его уникальный идентификационный код, 7-ая,8-ая цифры представляют тип учетной записи, которую он имеет с нами, в то время как последние 2 цифры представляют дополнительную информацию об учетной записи.

Однако сейчас у меня заканчиваются номера для назначения новым пользователям, и мне нужно изменить этот уникальный идентификатор. Одним из очевидных способов смягчения проблемы является увеличение размера идентификатора до 20 цифр, но это повлечет за собой значительное изменение кода, поскольку код предполагает, что идентификатор состоит из 10 цифр. Мой вопрос: есть ли способ разместить больше пользователей, используя 10-значный уникальный идентификатор с минимальным изменением кода. Не стесняйтесь указывать мне на любые научные статьи за то же самое.

2 ответа

ASCII был преобладающим западным набором символов, но знаете ли вы, что он использует только 7 бит? (В наборе ASCII всего 127 символов).

Из-за этого ребята из Unicode придумали схему, позволяющую ASCII и Unicode (в которой есть все символы по всему миру, тысячи и тысячи символов) сосуществовать.

Хитрость заключается в том, что символы UTF-8 являются ASCII до тех пор, пока они не получат значение> 127, в результате чего их верхний бит будет установлен в 1. UTF-8 использует это, чтобы сказать "этот символ будет использовать более одного байта".

В вашем случае вам, скорее всего, понадобится какое-то специальное значение для хранения в первой цифре этих чисел. Если коды вашей страны не превышают 89, вы можете создать правило, которое гласит: "Числа, начинающиеся с 9, - это новые, большие цифры; если они начинаются с чего-то < 9, то это старое, 10-значное число".

if (input[0] == '9')
    ProcessNewNumber(input);
else
    ProcessOldNumber(input);

В качестве альтернативы, вы можете рассмотреть вопрос о введении буквы в первую цифру. Коммунальные компании делали это в течение года - номера счетов были чисто числовыми, и однажды вы получили от них новый номер счета, и он неожиданно начался с буквы "А".

Объем работы, который потребуется, будет зависеть от того, насколько хорошо инкапсулирована ваша система. Если у вас есть солидный OO-подобный дизайн для обработки номеров счетов, он не должен требовать большого объема работы. Если ты не...

Чтобы поместить мои комментарии в ответ:

Вы можете преобразовать свой 10-значный код в другую базу, скажем, 16. Например, клиент 441951108 будет представлен в вашей базе данных как клиент 1A57A384,

Любые функции или методы, взаимодействующие с базой данных, должны включать эту логику, например

function getCustomer(c_id)
    id=dec_to_hex(c_id)
    return Database.getByID(id).details
end function

В приведенном выше примере getCustomer видит идентификатор клиента как в шестнадцатеричном, так и в десятичном формате, база данных видит в шестнадцатеричном виде, а остальная часть вашего приложения - в десятичном виде.

Вы можете увеличить базу по мере необходимости, в конечном итоге используя весь алфавит, различая прописные и строчные буквы, включая специальные символы и переходя на иностранные языки. Звучит смешно!


Редактировать:

Вы также можете использовать псевдонимы. При условии, что вы не использовали диапазон 0-9 для ветви (как я полагаю, у вас есть), вы можете использовать псевдоним 8 быть таким же, как ветвь 0, Аналогично для типа учетной записи (я подозреваю, что у вас будет больше места для ног там).

Вы также можете объединить две учетные записи и использовать двоичный двоичный объект для последних двух цифр (MSB цифры #9?) для новых пользователей для некоторых типов учетных записей и деталей.

Это звучит как старая унаследованная система, и на самом деле единственная разумная вещь, которую нужно сделать, - это реорганизовать ее в реляционную базу данных. Но я полагаю, вы уже знаете это....

Другие вопросы по тегам