Nadesłany przez Tomasz Lubiński, 12 marca 2012 23:12
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.
dowod_osobisty.js:
/** * Numer dowodu osobistego * Tomasz Lubinski * 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 = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; function getLetterValue(letter) { for (j=0; j<letterValues.length; j++) if (letter == letterValues[j]) return j; return -1; } //Check seria for (i=0; i<3; i++) if (getLetterValue(numer[i]) < 10) return false; //Check number for (i=3; i<9; i++) if (getLetterValue(numer[i]) < 0 || getLetterValue(numer[i]) > 9) return false; //sprawdz cyfre controlna 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 Osobitego jest prawidłowy * @param {string} seria - seria Dowodu Osobitego do walidacji * @param {string} numer - numer Dowodu Osobitego do walidacji * @return {boolean} - zwraca true jeżeli podany numer jest prawidłowy, false w przeciwnym wypadku */ function validateDO2(seria, numer) { return validateDO(seria + numer); }