js-신분증 검사

3761 단어
 function card(a) {
                    var b = " ,  440106198202020555";
                    if (!a) return " ,  440106198202020555";
                    if (!/^[0-9xX]+$/.test(a)) return b;
                    if (15 !== a.length && 18 !== a.length) return b;
                    var c, d, e, f, g, h, i = {
                        11 : " ",
                        12 : " ",
                        13 : " ",
                        14 : " ",
                        15 : " ",
                        21 : " ",
                        22 : " ",
                        23 : " ",
                        31 : " ",
                        32 : " ",
                        33 : " ",
                        34 : " ",
                        35 : " ",
                        36 : " ",
                        37 : " ",
                        41 : " ",
                        42 : " ",
                        43 : " ",
                        44 : " ",
                        45 : " ",
                        46 : " ",
                        50 : " ",
                        51 : " ",
                        52 : " ",
                        53 : " ",
                        54 : " ",
                        61 : " ",
                        62 : " ",
                        63 : " ",
                        64 : " ",
                        65 : " ",
                        71 : " ",
                        81 : " ",
                        82 : " ",
                        91 : " "
                    },
                    j = a.split("");
                    if (null == i[parseInt(a.substr(0, 2), 10)]) return b;
                    switch (a.length) {
                    case 15:
                        e = 0 === (parseInt(a.substr(6, 2), 10) + 1900) % 4 || 0 === (parseInt(a.substr(6, 2), 10) + 1900) % 100 && 0 == (parseInt(a.substr(6, 2), 10) + 1900) % 4 ? /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/: /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/,
                        e.test(a) || (h = b);
                        break;
                    case 18:
                        e = 0 === parseInt(a.substr(6, 4), 10) % 4 || 0 === parseInt(a.substr(6, 4), 10) % 100 && 0 === parseInt(a.substr(6, 4), 10) % 4 ? /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/: /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/,
                        e.test(a) ? (f = 7 * (parseInt(j[0], 10) + parseInt(j[10], 10)) + 9 * (parseInt(j[1], 10) + parseInt(j[11], 10)) + 10 * (parseInt(j[2], 10) + parseInt(j[12], 10)) + 5 * (parseInt(j[3], 10) + parseInt(j[13], 10)) + 8 * (parseInt(j[4], 10) + parseInt(j[14], 10)) + 4 * (parseInt(j[5], 10) + parseInt(j[15], 10)) + 2 * (parseInt(j[6], 10) + parseInt(j[16], 10)) + parseInt(j[7], 10) + 6 * parseInt(j[8], 10) + 3 * parseInt(j[9], 10), c = f % 11, g = "F", d = "10X98765432", g = d.substr(c, 1), g != j[17].toUpperCase() && (h = b)) : h = b
                    }
                    return h || !0
                }

좋은 웹페이지 즐겨찾기