31-12-2012, 17:03
Witam.
Ostatnio natrafiłem na stronkę z algorytmami, a tam znalazłem informację o przetwarzaniu numeru PESEL. Jako że uczę się JS, postanowiłem napisać skrypt do przetwarzania tego numeru.
Wyszło mi coś takiego:
Czy mógłby ktoś zerknąć na kod, i napisać mi czy dobrze kombinuję?
Chodzi mi o to, czy sam JS jest napisany poprawnie. Ponieważ w pierwszej wersji użyłem kilku funkcji (getYear(), getMonth(), getSex() etc.) zagnieżdżonych w głównej "validatePesel()". I nie wiem, które rozwiązanie jest leprze albo poprawniejsze?
Z góry dzięki za odpowiedź.
Pozdrawiam.
Ostatnio natrafiłem na stronkę z algorytmami, a tam znalazłem informację o przetwarzaniu numeru PESEL. Jako że uczę się JS, postanowiłem napisać skrypt do przetwarzania tego numeru.
Wyszło mi coś takiego:
Kod:
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8" />
<title>index</title>
<meta name="description" content="" />
<meta name="author" content="msx" />
<meta name="viewport" content="width=device-width; initial-scale=1.0" />
<script type="text/javascript">
/**
* @author msx
* Validacja i prtzetworzenie na dane numeru PESEL
*/
function validatePesel() {
var nrPesel = document.getElementById("nr_pesel").value;
//przypisanie numeru pesel do zmiennej
//sprawdzenie czy nr PESEl został wpisany i czy składa sie z 11 cyfr.
if (nrPesel.length === 11 && nrPesel !== "" && !isNaN(nrPesel)) {
//sprawdzenie sumy kontrolnej
var sum = nrPesel.charAt(0) * 1 + nrPesel.charAt(1) * 3 + nrPesel.charAt(2) * 7 + nrPesel.charAt(3) * 9 + nrPesel.charAt(4) * 1 + nrPesel.charAt(5) * 3 + nrPesel.charAt(6) * 7 + nrPesel.charAt(7) * 9 + nrPesel.charAt(8) * 1 + nrPesel.charAt(9) * 3;
sum = sum % 10;
sum = 10 - sum;
sum = sum % 10;
//jeżeli suma kontrolna jest równa ostatniej cyfrze numeru PESEL zostaje wykonanan reszta skryptu
if (sum == nrPesel.charAt(10)) {
//przetworzenie roku
var year = parseInt(nrPesel.charAt(0), 10) * 10;
year = year + parseInt(nrPesel.charAt(1), 10);
var month = parseInt(nrPesel.charAt(2), 10) * 10;
month = month + parseInt(nrPesel.charAt(3), 10);
if (month > 83 && month < 93) {
year += 1800;
}
if (month > 0 && month < 13) {
year += 1900;
}
if (month > 20 && month < 23) {
year += 2000;
}
if (month > 40 && month < 53) {
year += 2100;
}
if (month > 60 && month < 73) {
year += 2200;
}
//przetworzenie miesiąca
var month = parseInt(nrPesel.charAt(2), 10) * 10;
month = month + parseInt(nrPesel.charAt(3), 10);
if (month > 83 && month < 93) {
month = month - 80;
}
if (month > 20 && month < 23) {
month = month - 20;
}
if (month > 40 && month < 53) {
month = month - 40;
}
switch(month) {
case 1:
month = "Styczeń";
break;
case 2:
month = "Luty";
break;
case 3:
month = "Marzec";
break;
case 4:
month = "Kwiecień";
break;
case 5:
month = "Maj";
break;
case 6:
month = "Czerwiec";
break;
case 7:
month = "Lipiec";
break;
case 8:
month = "Sierpień";
break;
case 9:
month = "Wrzesień";
break;
case 10:
month = "Październik";
break;
case 11:
month = "Listopad";
break;
case 12:
month = "Grudzień";
break;
}
//przetworzenie dnia
var day = nrPesel.charAt(4) + nrPesel.charAt(5);
//uzyskanie rodzaju płci
var sex = parseInt(nrPesel.charAt(9), 10);
if ((sex % 2) === 0) {
sex = "Kobieta";
} else {
sex = "Mężczyzna";
}
//zwrócenie danych
document.getElementById("dzien").innerHTML = day;
document.getElementById("miesiac").innerHTML = month;
document.getElementById("rok").innerHTML = year;
document.getElementById("plec").innerHTML = sex;
} else {
alert("Numer PESEl jest nie prawidłowy");
//alert w przypadku nie prawidłowej sumy kontrolnej
return false;
}
} else {
alert("Numer PESEL musia się składać z 11 cyfr, bez liter i innych znaków.");
//alert w przypadku za krótkiej/dłógiej ilości znaków, oraz w przypadku podania innego znaku niż liczba
}
}
</script>
</head>
<body>
<form>
<input type="text" id="nr_pesel">
<input type="button" name="submit" value="Klik!" onclick="validatePesel()">
</form>
<table border="1" cellpadding="5" cellspacing="0" width="350">
<tr>
<td>Dzień:</td><td id="dzien"></td>
</tr>
<tr>
<td>Miesiąc:</td><td id="miesiac"></td>
</tr>
<tr>
<td>Rok:</td><td id="rok"></td>
</tr>
<tr>
<td>Płeć:</td><td id="plec"></td>
</tr>
</table>
</body>
</html>
Chodzi mi o to, czy sam JS jest napisany poprawnie. Ponieważ w pierwszej wersji użyłem kilku funkcji (getYear(), getMonth(), getSex() etc.) zagnieżdżonych w głównej "validatePesel()". I nie wiem, które rozwiązanie jest leprze albo poprawniejsze?
Z góry dzięki za odpowiedź.
Pozdrawiam.