html中身份证格式是否合法

问题遇到的现象和发生背景

判断输入的身份证号码是否合法。代码主要思路是先判断输入的内容长度是否为18位,然后再判断前17位是否都为数字,18位是否为数字或者X。(先不考虑身份证的各种构成要素)

用代码块功能插入代码,请勿粘贴截图
html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>title>
    head>
    <script language="JavaScript" type="text/javascript">
        var a = document.getElementById("identity").value;
        String a;
        var b = document.getElementById("result");
        // var array1= new Array(0,1,2,3,4,5,6,7,8,9);
        // var array2= new Array(1,2);
        // var array3= new Array(0,1);
        // var array4= new Array(0,1,2,3);
        
        function checklegal(){
            if(a.length!=18){
                b.innerHTML="您输入的身份证号码不合法!";
            }else{
                for(int i=0;i<=17;i++){
                    var c = a.charAt(i);
                    ascc=c.charCodeAt();
                    while(i<=16){
                        
                        if(ascc<=57 && ascc>=48){
                            b.innerHTML="您输入的身份证号码合格!";
                        }else{
                            b.innerHTML="您输入的身份证号码不合法!";
                        }
                        
                        
                    }
                    while(i==17){
                        if(ascc<=57 && ascc>=48 || ascc==88){
                            b.innerHTML="您输入的身份证号码合格!";
                        }else{
                            b.innerHTML="您输入的身份证号码不合法!";
                        }
                    }
                    
                }
            }
        }
    
    script>
    <body>
        <div>
            <p>
                请输入您的身份证号码:
            p>
            <form action="index.html" method="get" onsubmit="return checklegal()">
                <input type="text" id="identity"/>
                <button type="button" onsubmit="return checklegal()">确认button>
                <span id="result">span>
            form>
        div>
    body>
html>


运行结果及报错内容

输入的内容传递不到js中

我的解答思路和尝试过的方法

应该是值取错了,但检查了一下好像也没什么问题

我想要达到的结果

可以对输入的内容进行判断,是否符合代码中所表示的要求

可以用正则表达式


/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/

正则

你写个while(i<=16)不是标准死循环吗
改成if

可以使用正则表达式进行验证

/^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;

一个正则,所有问题迎刃而解