Изчисляване на възраст по новите правила за ЕГН

Наскоро ми се наложи да пиша скрипт който да изчислява възрастта на човек по неговото ЕГН. Естествено, покрай моята разсеяност изобщо не се досетих че след 2000 г. имаше някакви промени. Написах си скриптчето, пуснах и тествах, обаче още на следващия ден клиента ми звъни и ми казва че имаме лице което е на 160 г.! Силно учуден направих проверка и виждам ЕГН на дете което започва така:

084809****

След като си помислих че светът е свършил щом имаме месец с номер 48, се сетих че явно аз съм в грешка, проверих на официалното място http://grao.government.bg и проучване там (защото естествено не е написано много прегледно) "открих" какво е новото и го обобщавам тук, за да спестя време на колегите които ме попитаха за това:

– За родените преди 01.01.1900 г. към месеца се прибавя числото 20.
– За родените между 01.01.1900 и 31.12.1999 месецът се записва с поредният си номер
– За родените след 31.12.1999 г. към месеца се прибавя числото 40.

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

Валидните диапазони за месеците са

A. [1 ÷ 12] –> годината е между 1900 до 1999
B [21 ÷ 32] –> годината е преди 1900
C [41 ÷ 52] –> годината е след 1999

От тук нататък са си елементарни изчисления. Успех!