RSS
 

PHP class за работа с ЕГН

От време на време в офиса ни се налага да вграждаме в някои системи възможност за обработка на ЕГН-та. За целта е хубаво човек да разполага с някаква лесна за ползване библиотека, която да върши работата по валидиране и извличане на информацията от ЕГН.

Естествено, да валидираш едно ЕГН и да изкормиш от него дата на раждане и пол, не е точно каквото бих нарекъл “предизвикателство” :) Интересното е, че от въпросния номер с голяма доза сигурност може да се предположи и общината, в която е роден собственика му. Малко хора знаят този факт, а още по-малко могат да кажат точно каква е зависимостта между последните 4 цифри и месторождението.

Идеята е, че съществува неофициална практика в разпределението на номерата по региони. Никъде в сайта на ГРАО обаче няма да намерите официален документ за това. Освен това, тази практика не се прилага в 100% от случаите, така че няма как да се разчита само на нея. Понякога номерата в даден регион свършват, и тогава се взимат номера от друг регион.

И така – освен тривиалните задачи по валидиране и изкормване на ЕГН, моят клас прави и проверка за регионът, в който е най-вероятно да е издаден конкретния номер. Зависимостта между номера и региони съм взел директно от тази страница. Това, което съм направил, е просто лесен за ползване PHP клас, с който да извършвате всички нужни операции с едно ЕГН. Писан е за PHP5!

Download egn.php.zip [1.97kB]

Ползване

[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]

Leave a Reply

 
 
  1. Петър Гечев

    2 April 2010 at 18:04

    Здрасти,
    много ти благодаря за класа, обаче има някакъв проблем с егнтата започващи с 0

     
  2. Rosko

    6 April 2010 at 09:56

    A… да, това беше един доста глупав бъг :) Оправен е

     
  3. Петър Гечев

    6 April 2010 at 11:07

    Много ти благодаря! :)