Nadesłany przez Romek Żyłła, 24 stycznia 2014 23:32
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
walidator_dowodu_osobistego.js:
/* * Numer dowodu osobistego * orginalnie Tomasz Lubinski * - poprawki z wykorzystaniem metody string.indexOf javascript R. Żyłła * www.algorytm.org */ /* * Sprawdza czy podany numer Dowodu Osobitego jest prawidłowy * @param {string} numer - seria i numer Dowodu Osobitego do walidacji (bez spacji, myslinkow, itp) * @return {boolean} - zwraca true jeżeli podany numer jest prawidłowy, false w przeciwnym wypadku */ function validateDO(numer) { //Check length if (numer == null || numer.length != 9) return false; numer = numer.toUpperCase(); letterValues = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; function getLetterValue(letter){ return letterValues.indexOf(letter) } //Check seria for (i=0; i<3; i++) if (getLetterValue(numer[i]) < 10 || numer[i] == 'O' || numer == 'Q') return false; //Check numbers for (i=3; i<9; i++) if (getLetterValue(numer[i]) < 0 || getLetterValue(numer[i]) > 9) return false; //sprawdz cyfre kontrolna sum = 7 * getLetterValue(numer[0]) + 3 * getLetterValue(numer[1]) + 1 * getLetterValue(numer[2]) + 7 * getLetterValue(numer[4]) + 3 * getLetterValue(numer[5]) + 1 * getLetterValue(numer[6]) + 7 * getLetterValue(numer[7]) + 3 * getLetterValue(numer[8]); sum %= 10; if (sum != getLetterValue(numer[3])) return false; return true; } /** * Sprawdza czy podany numer Dowodu Osobitego jest prawidłowy * @param {string} numer - seria i numer Dowodu Osobitego do walidacji (spacja lub myślnik oddziela serię od numeru) * @return {boolean} - zwraca true jeżeli podany numer jest prawidłowy, false w przeciwnym wypadku */ function validateDOwithSeparator(numer) { //Check length if (numer == null || numer.length != 10) return false; //Check separator if (numer[3] != ' ' && numer[3] != '-') return false; numer = numer.replace(/[\s-]/g, ''); return validateDO(numer); } /* * Sprawdza czy podany numer Dowodu Osobistego jest prawidłowy * @param {string} seria - seria Dowodu Osobistego do walidacji * @param {string} numer - numer Dowodu Osobistego do walidacji * @return {boolean} - zwraca true jeżeli podany numer jest prawidłowy, false w przeciwnym wypadku * @return {boolean} - zwraca także false jeśli w serii jest użyta litera O lub Q */ function validateDO2(seria, numer) { return validateDO(seria + numer); }
Zamieniłbym jeszcze(35-37):
if (sum != getLetterValue( numer[3])) return false;
return true;
Na coś takiego:
return sum == getLetterValue( numer[3]);