Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
[JavaScript] Proszę o sprawdzenie kodu
#1
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:
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>
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.
Odpowiedz
#2
Co do zasady to wszystko jest ok natomiast jeśli chodzi o szczegóły to nie wiem. rzadko muszę debugować skrypty na papierze. jeśli działa to znaczy że jest ok.
Nie będę pisał też o optymalizacji bo to trzeba by się bardziej wgłębić.
http://webmaster.na6.waw.pl
Odpowiedz


Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Czy ilość zmiennych w javascript, jako języku interpretowanym, ma znaczenie? Jakie gburhiphop 22 22,618 09-09-2016, 21:09
Ostatni post: Ribana
Toungue Problem z nie działającym javascript Radian 4 4,860 20-03-2015, 16:31
Ostatni post: Radian
  [CSS] Problem z wyglądem menu w Firefox a IE proszę o pomoc adrin6 4 5,000 18-06-2013, 22:33
Ostatni post: adrin6
  JavaScript podstawy bryndzyk 5 4,232 18-05-2013, 21:17
Ostatni post: ferrante
  JavaScript Gmaps Api Rysowanie Squezzer 0 2,082 16-05-2013, 18:18
Ostatni post: Squezzer

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości
Sponsorzy i przyjaciele
SeoHost.pl