PHP class за работа с ЕГН
От време на време в офиса ни се налага да вграждаме в някои системи възможност за обработка на ЕГН-та. За целта е хубаво човек да разполага с някаква лесна за ползване библиотека, която да върши работата по валидиране и извличане на информацията от ЕГН.
Естествено, да валидираш едно ЕГН и да изкормиш от него дата на раждане и пол, не е точно каквото бих нарекъл “предизвикателство”
Интересното е, че от въпросния номер с голяма доза сигурност може да се предположи и общината, в която е роден собственика му. Малко хора знаят този факт, а още по-малко могат да кажат точно каква е зависимостта между последните 4 цифри и месторождението.
Идеята е, че съществува неофициална практика в разпределението на номерата по региони. Никъде в сайта на ГРАО обаче няма да намерите официален документ за това. Освен това, тази практика не се прилага в 100% от случаите, така че няма как да се разчита само на нея. Понякога номерата в даден регион свършват, и тогава се взимат номера от друг регион.
И така – освен тривиалните задачи по валидиране и изкормване на ЕГН, моят клас прави и проверка за регионът, в който е най-вероятно да е издаден конкретния номер. Зависимостта между номера и региони съм взел директно от тази страница. Това, което съм направил, е просто лесен за ползване PHP клас, с който да извършвате всички нужни операции с едно ЕГН. Писан е за PHP5!
Ползване
[php] // първо създаваме обект $egn: $egn = new BulgarianEGN($egn_string); // В конструктора се извършват всички // необходими операции. Вече можете да // ползвате различните член-променливи // на обекта, за да получите данните за човека $egn->birth_year; // integer $egn->birth_month; // integer $egn->birth_day; // integer $egn->region; // UTF8 string $egn->is_male; // boolean $egn->is_female; // boolean // Освен това, можете да ползвате // няколко static метода: BulgarianEGN::isValid($egn_string); // boolean BulgarianEGN::getRegion($egn_string); // UTF8 string BulgarianEGN::factory($egn_string); // a BulgarianEGN object [/php]
Петър Гечев
2 April 2010 at 18:04
Здрасти,
много ти благодаря за класа, обаче има някакъв проблем с егнтата започващи с 0
Rosko
6 April 2010 at 09:56
A… да, това беше един доста глупав бъг
Оправен е
Петър Гечев
6 April 2010 at 11:07
Много ти благодаря!