<head>
<meta http-equiv="Content-Type" content="text/html;charset=windows-1251">
<meta name="author" content="Dimitar T Dimitrov">
<script type="text/javascript">
// Dimitar Todorov Dimitrov
// Sofia, Bulgaria 2007
var regions =
new Array (
Array(43,"Благоевград"),
Array(93,"Бургас"),
Array(139,"Варна"),
Array(169,"Велико Търново"),
Array(183,"Видин"),
Array(217,"Враца"),
Array(233,"Габрово"),
Array(281,"Кърджали"),
Array(301,"Кюстендил"),
Array(319,"Ловеч"),
Array(341,"Монтана"),
Array(377,"Пазарджик"),
Array(395,"Перник"),
Array(435,"Плевен"),
Array(501,"Пловдив"),
Array(527,"Разград"),
Array(555,"Русе"),
Array(575,"Силистра"),
Array(601,"Сливен"),
Array(623,"Смолян"),
Array(721,"София - град"),
Array(751,"София - окръг"),
Array(789,"Стара Загора"),
Array(821,"Добрич (Толбухин)"),
Array(843,"Търговище"),
Array(871,"Хасково"),
Array(903,"Шумен"),
Array(925,"Ямбол"),
Array(999,"Друг/Неизвестен")
);
function isValidDate(yyyy,mm,dd)
{
function isLeapYear(year)
{
if (year % 400 == 0) return true;
if (year % 100 == 0) return false;
if (year % 4 == 0) return true;
}
var months = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
months[1] += isLeapYear(yyyy) ? 1 : 0;
return (dd >= 01 && dd <= months[mm - 1]) ? true : false;
}
function isValidEGN(egn)
{
var weights = new Array(2,4,8,5,10,9,7,3,6);
var crc = 0;
var year = Number(egn[0] + egn[1]);
var month = Number(egn[2] + egn[3]);
var day = Number(egn[4] + egn[5]);
if (month > 40)
{
if (!isValidDate(2000 + year, month - 40, day)) return false;
}
else if (month > 20)
{
if (!isValidDate(1800 + year, month - 20, day)) return false;
}
else
{
if (!isValidDate(1900 + year, month, day)) return false;
}
if (!egn.match(/\d{10}/g)) return false; // Check if 10 digits
for (var i = 0; i < 9; i++)
{
crc += egn.charAt(i) * weights[i];
}
crc = crc % 11;
if (crc == 10) crc = 0;
if (crc != egn.charAt(9)) return false;
return true;
}
function infoEGN(egn)
{
var res = document.getElementById('results');
res.innerHTML = '';
var months = new Array('януари', 'февруари', 'март', 'април', 'май', 'юни', 'юли', 'август', 'септември', 'октомври', 'ноември', 'декември');
if (!isValidEGN(egn))
{
res.innerHTML = '<i><b>Невалиден ЕГН номер!</b></i>';
return false;
}
var sex = (egn.charAt(8) % 2) ? 1:0;
var year = egn[0] + egn[1];
var month = Number(egn[2] + egn[3]);
var day = egn[4] + egn[5];
var reg = Number(egn[6] + egn[7] + egn[8]);
if (month > 40)
{
month = month - 40;
year = '20'+year;
}
else if (month > 20)
{
month = month - 20;
year = '18'+year;
}
else
year = '19'+year;
var fnum = 0;
var lnum = 43;
for(var i = 0; i < regions.length; i++)
{
if (reg >= fnum && reg <= regions[i][0])
{
var region = regions[i][1];
if (egn[8] % 2 != 0)
reg--;
var birthnumber = (reg - fnum) / 2;
break;
}
fnum = regions[i][0] + 1;
}
res.innerHTML += 'Валиден ЕГН на ';
res.innerHTML += sex ? '<b>жена</b> родена</b>':'<b>мъж</b> роден';
res.innerHTML += ' на <b>' + day + ' ' + months[month - 1] + ' ' + year + 'г.</b>';
res.innerHTML += ' в област <b>' + region + '</b>.';
if (birthnumber)
{
res.innerHTML += 'В този ден ' + ((birthnumber > 1)? 'са регистрирани ' : 'е регистрирано ');
res.innerHTML += '<b>' + birthnumber +'</b> ';
res.innerHTML += (birthnumber > 1)? (sex?'момичета':'момчета') : (sex?'момиче':'момче');
res.innerHTML += ' преди ' + (sex?'нея':'него') + '.';
}
else
{
res.innerHTML += (sex?'Тя е първата регистрирана':'Той е първият регистриран');
res.innerHTML += ' за деня.';
}
}
function check()
{
var egn = document.getElementById("egn").value;
infoEGN(egn);
}
function numberText(event, sender)
{
var e = window.event ? window.event : event;
var key = document.all ? e.keyCode : e.charCode;
if (!key) return true;
key = String.fromCharCode(key);
if (!key.match(/[0-9]/))
return false;
}
</script>
</head>
<body>
ЕГН: <input type="text" id='egn' maxlength="10" onKeyPress="return numberText(event, this)" />
<input type="button" onclick='check()' value="check" />
<br /><br />
<div id='results'></div>
</body>