Винаги съм се чудил защо системата Bulstat е организирана по този начин. Това е един типичен пример за родната простотия и мърлявщина. От скоро в България въведоха системата IBAN и на мен започнаха да ми стават ясни някои неща. Двете системи са просто ужасни и те са направени такива абсолютно умишлено. Най-напред аз не мога да си представя кой здраво мислещ човек, сега или преди 30 години, би предложил представяне на числа с нули отпред. Защо една фирма да няма булстат “527”, а да има булстат “000000527”? По закон трябва цифрите да са 9, ами добре, направете ги 9, сложете една единица вместо първата нула и готово. Така няма да има опасност, някой служител, на някой компютър, някъде в страната, да направи съдбоносната грешка, да представи едно число, като число. Например в момента, ако аз си отворя един Excel и напиша един булстат в една клетка. Програмата Excel, и то с пълно право, ще ми “изяде” нулите, които стоят пред числото. Резултатът от това е пълна каша, защото булстат номерата могат да съдържат 9 или 13 цифри. Друга велика тъпотия е това, че на някакъв етап от време, към някакви булстат номера, по някакви причини, е била залепена някаква буква. Това не оставя никакъв друг избор на програмистите, освен да използват поле string, и то с променлива дължина, за пазене на Булстат. До тук възможните грешки са следните:
- Представяне на числото, като integer
- Представяне на числото, като няколко integer числа
- Представяне на числото, като string с недостатъчна (фиксирана) дължина
Всеки човек, който поне веднъж е работил с булстат номера на компютър е правил поне една от горните грешки. Блъскаме си главите, псуваме управляващите, а те през това време дописват следващата голяма глупост в “Законът за регистър Булстат”. Преди да видя системата IBAN бях сигурен, че това е само български феномен. Тогава ми стана ясно, че подобни глупости виреят и на други места. Системата IBAN е значително по-зле от Булстат, там плетеницата от значещи и не незначещи букви и цифри е просто умопомрачителна. Тези дни се нагледах на хора, които броят нули, разположени някъде към средата на IBAN номера. Запомнят бройката им, преписват ги и после ги пращат по SMS или факс, някъде си. Там някой друг прави същото – преписва същите тези неща от SMS или факс съобщението в компютъра си. След като и на мен ми се наложи да го направя няколко пъти реших да седна и да предложа очевидното решение на тези проблем. Защо трябва да индексираме, когато можем да хешираме?
Сигурен съм, че много хора знаят за това решение, но то не се прилага по някакви политически или икономически причини. Аз колкото и да мислих по този въпрос не можах да стигна до тези причини. Ето как аз си представям задачата и решението:
Задачата и пред двете системи IBAN и Булстат е практически една и съща. Те трябва да съпоставят някакви уникални данни, на някакво уникално число. Част от тези данни могат да са лични, конфиденциални, секретни и т.н., но това не е от значение. Това което ни трябва е хеш (еднопосочна) функция. Даваме нашите данни на тази функция и тя ни произвежда номера. Ето един пример с първата криптографска хеш функция, която ми попадна:
1
| |
Подадох на функцията един string, той съдържа моята държава, град, банка, име и ЕГН. Функцията ми даде един друг string и аз съм сигурен, че няма друг входен string, който да отговаря на този изходен. Ако си бях поиграл малко повече да избера някоя по-подходяща функция от MD5 щях да получа доста по-къс и приятен string. Ето предимствата на този подход:
- Изходът от функцията винаги е с фиксирана дължина
- Изходът от функцията лесно може да се представи, като integer или като string
- Изходът от функцията не е нужно да се помни, всеки може да си го произведе при услови, че разполага с функцията и с нейните входни данни
Трябва ви моят IBAN – няма проблем, напишете ми данните в компютъра си и ще го получите! От друга страна, ако не ви вярвам, аз мога да не ви давам данните си, просто ще ви дам изхода на функцията.
Този подход може да се използва за всичко, физически лица, юридически лица, банкови сметки, лични данни и т.н. Държавата не трябва да ми пише в законите кой регистър с колко цифри да индексирам. Държавата трябва да ми каже кои данни и коя хеш функция да използвам. Ако е достатъчно добра хеш функцията, тя може да бъде една за всичко…