въпрос за ЕГН

ljuljana

Registered
Имаме електронен дневник. Но забелязахме, че когато ученик си въведе ЕГН, което завършва на 0 и изписва "Невалидна контролна цифра на ЕГН-то"
Не разбирам много и искам да попитам дали някъде в този код има условие ЕГН-то да не завършва на 0 (ако това е проблема) и ако е така как да го оправя.

d = d % 11;
a = parseInt(tfld.charAt(9));
if ((d == 10) && (a != 0))
{
msg(ifld,"error","ERROR : Not Valid EGN");
setfocus(vfld);
return false;
}
else
msg (ifld, "warn", "");
if (d != a)
{
msg(ifld,"error","ERROR : Not Valid EGN");
setfocus(vfld);
return false;
}
else;
msg (ifld, "warn", "");
return true;
};
 
Виж този код:
Код:
<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>
 
d = d % 11;
a = parseInt(tfld.charAt(9));
if ((d == 10) && (a != 0))
{
msg(ifld,"error","ERROR : Not Valid EGN");
setfocus(vfld);
return false;
}
else
msg (ifld, "warn", "");
if (d != a)
{
msg(ifld,"error","ERROR : Not Valid EGN");
setfocus(vfld);
return false;
}
else;
msg (ifld, "warn", "");
return true;
};
Ето така би трябвало да стане:
d = d % 11;
a = parseInt(tfld.charAt(9));
if (d == 10)
{
msg(ifld,"error","ERROR : Not Valid EGN");
setfocus(vfld);
return false;
}
else
msg (ifld, "warn", "");
if (d != a)
{
msg(ifld,"error","ERROR : Not Valid EGN");
setfocus(vfld);
return false;
}
else;
msg (ifld, "warn", "");
return true;
};
 

Back
Горе