# زبان های اسکریپتی > JavaScript و Framework های مبتنی بر آن >  صحت درست بودن کد ملی با جاوا اسکریپت

## hamidhassas

یک کد در پیدا کردم که با اون میشه کد ملی رو چک کرد اما مشکلم اینه که میخوام به کد دیگه ای ادقامش کنم اما نمیدونم چطوری ؟

کد چک کردن کد ملی:

<script type="text/javascript">
function checkCodeMeli(code)
{
  var L=code.length;
  if(L<8 || parseInt(code,10)==0)
    return false;
  code=('0000'+code).substr(L+4-10);
  if(parseInt(code.substr(3,6),10)==0)
    return false;
  var c=parseInt(code.substr(9,1),10), s=0;
  for(var i=0;i<9;i++)
    s+=parseInt(code.substr(i,1),10)*(10-i);
  s=s%11;
  return (s<2 && c==s) || (s>=2 && c==(11-s));
}
</script>
<script type="text/javascript">
            function checkMelliCode(meli_code)
            {
                  if (meli_code.length == 10)
                    {
                            if(meli_code=='1111111111' || meli_code=='2222222222' || meli_code=='3333333333' || meli_code=='4444444444' || meli_code=='5555555555'  || meli_code=='6666666666'  || meli_code=='7777777777'  || meli_code=='8888888888'  || meli_code=='9999999999' )
                                {
                                    alert(11);
                                }else{
                                    c = parseInt(meli_code.charAt(9));
                                    n = parseInt(meli_code.charAt(0))*10 + parseInt(meli_code.charAt(1))*9 + parseInt(meli_code.charAt(2))*8 + parseInt(meli_code.charAt(3))*7 + parseInt(meli_code.charAt(4))*6 + parseInt(meli_code.charAt(5))*5 + parseInt(meli_code.charAt(6))*4 + parseInt(meli_code.charAt(7))*3 + parseInt(meli_code.charAt(8))*2; 
                                    r = n - parseInt(n/11)*11;
                                        if ((r == 0 && r == c) || (r == 1 && c == 1) || (r > 1 && c == 11 - r))
                                            {
                                                alert('کد ملی صحیح می باشد');
                                            }
                                            else
                                            {
                                                alert('کد ملی وارد شده معتبر نمی باشد');
                                            }                
                                }
                    }
 
            }
        </script>
</head>
    <body>
        <font color="red"  style="cursor:pointer;" onclick="checkMelliCode('1234567891');">show</font>
    </body>
</html>


کد خودم رو به صورت زیر نوشتم اما 2 تا مشکل وجود داره
1- اگر عدد های وارد شده در تکسباکس کمتر از 10 رقم باشده کد اجرا نمیشه 
2- وقتی که کد 10 رقمی وارد میشه و معتبر نیست پیغام خطا به نمایش در می آید اما عملیات متوقف نمیشه و اطلاعات به دیتابیس ارسال میشه 

function validateForm(){
var field = document.forms["form1"]["textfield1"].value;
if (document.getElementById('textfield1').value == ''){
    document.getElementById('name-error').innerHTML = 'نام و نام خانوادگی مالک کالا را وارد نمایید';
    return false;
 }
 else{
        document.getElementById('name-error').innerHTML = '';
  }
   if(document.getElementById('textfield2').value == ''){
        document.getElementById('melli-error').innerHTML = 'کد ملی مالک کالا را وارد نمایید!';
        return false;
  }
 else{
        document.getElementById('melli-error').innerHTML = '';
  }
  if(document.getElementById('textfield4').value == ''){
   document.getElementById('tel-error').innerHTML = 'لطفا تلفن ثابت را وارد نمایید';
   return false;
   }
 else{
        document.getElementById('tel-error').innerHTML = '';
  }
  if(document.getElementById('textfield5').value == ''){
   document.getElementById('mobil-error').innerHTML = 'لطفا تلفن همراه را وارد نمایید';
   return false;
   }
 else{
        document.getElementById('mobil-error').innerHTML = '';
  }
  if(document.getElementById('textfield6').value == ''){
   document.getElementById('post-error').innerHTML = 'لطفا کد پستی را وارد نمایید';
   return false;
   }
 else{
        document.getElementById('post-error').innerHTML = '';
  }
  if(document.getElementById('textfield7').value == ''){
   document.getElementById('address-error').innerHTML = 'لطفا آدرس مالک کالا را وارد نمایید';
   return false;
   }
 else{
        document.getElementById('address-error').innerHTML = '';
  }
  email=document.form1.textfield3.value;
    var atpos=email.indexOf("@");
    var dotpos=email.lastIndexOf(".");
    if(email!="")
    {
        if(atpos<1||dotpos<atpos+2||dotpos  +2>=x.length)
        {
document.getElementById('mail-error').innerHTML ="لطفا ايميل آدرس را صحيح وارد كنيد";
            return false;
        }
    }
 else{
        document.getElementById('mail-error').innerHTML = '';
  }
 
  meli_code=document.form1.textfield2.value;
                  if (meli_code.length == 10)
                    {
                            if(meli_code=='1111111111' || meli_code=='2222222222' || meli_code=='3333333333' || meli_code=='4444444444' || meli_code=='5555555555'  || meli_code=='6666666666'  || meli_code=='7777777777'  || meli_code=='8888888888'  || meli_code=='9999999999' )
                                {
                                    alert(11);
                                }else{
                                    c = parseInt(meli_code.charAt(9));
                                    n = parseInt(meli_code.charAt(0))*10 + parseInt(meli_code.charAt(1))*9 + parseInt(meli_code.charAt(2))*8 + parseInt(meli_code.charAt(3))*7 + parseInt(meli_code.charAt(4))*6 + parseInt(meli_code.charAt(5))*5 + parseInt(meli_code.charAt(6))*4 + parseInt(meli_code.charAt(7))*3 + parseInt(meli_code.charAt(8))*2; 
                                    r = n - parseInt(n/11)*11;
                                        if ((r == 0 && r == c) || (r == 1 && c == 1) || (r > 1 && c == 11 - r))
                                            {
                                                document.getElementById('melli-error').innerHTML ="";
                                            }
                                            else
                                            {
                                                document.getElementById('melli-error').innerHTML ="کد ملی وارد شده معتبر نمی باشد";
                                            }                
                                }
                    }
 
}

----------


## hamidhassas

:متفکر:  :متفکر:  :متفکر:  :متفکر:  :متفکر:  :متفکر:  :متفکر:

----------


## sali444

آی آر نیک اسکریپتشو داره
میتونی بکشی بیرون
البته مطمعن نیسم کلاینت باشه

----------


## hamidhassas

:متفکر:  :متفکر:  :متفکر:  :متعجب:  :متفکر:

----------


## hamidhassas

من که سر در نمیارم گه چکار باید بکنم

----------


## sali444

توی سایت nic.ir، توی بخش ثبت نامش درست بودن کد ملی چک میشه. البته الان رفتم چک کردم و دیدم که کدش سمت سروره! :))
اما یه سوال :

 <font color="red"  style="cursor:pointer;" onclick="checkMelliCode('1234567891');">show</font>

onclick توی تگ فونت جواب میده؟


            function checkMelliCode(meli_code)
            {
                  if (meli_code.length == 10)
                    {
                            if(meli_code=='1111111111' || meli_code=='2222222222' || meli_code=='3333333333' || meli_code=='4444444444' || meli_code=='5555555555'  || meli_code=='6666666666'  || meli_code=='7777777777'  || meli_code=='8888888888'  || meli_code=='9999999999' )
                                {
                                    alert(11);
                                }else{
                                    c = parseInt(meli_code.charAt(9));
                                    n  = parseInt(meli_code.charAt(0))*10 + parseInt(meli_code.charAt(1))*9 +  parseInt(meli_code.charAt(2))*8 + parseInt(meli_code.charAt(3))*7 +  parseInt(meli_code.charAt(4))*6 + parseInt(meli_code.charAt(5))*5 +  parseInt(meli_code.charAt(6))*4 + parseInt(meli_code.charAt(7))*3 +  parseInt(meli_code.charAt(8))*2; 
                                    r = n - parseInt(n/11)*11;
                                        if ((r == 0 && r == c) || (r == 1 && c == 1) || (r > 1 && c == 11 - r))
                                            {
                                                alert('کد ملی صحیح می باشد');
                                            }
                                            else
                                            {
                                                alert('کد ملی وارد شده معتبر نمی باشد');
                                            }                
                                }
                    }
  
            }


توی کد بالا:
1111111111 و 2222222222 و ... رو با ریجکس چک کن.
کد به نظر دسته از لحاظ سینتکس/ اما از لحاظ الگوریتم نمی دونم!
امتحانش کن با یه دکمه و تکست باکس...

----------


## sali444

پست دوبار ثبت شد...
امکان حذفم که نیست...

----------


## hamidhassas

وقتی که کد 10 رقمی وارد میشه و معتبر نیست پیغام خطا به نمایش در می آید* اما عملیات متوقف نمیشه و اطلاعات به دیتابیس ارسال میشه*

----------


## hamidhassas

:متفکر:  :متفکر:

----------


## dalvand

function checkMelliCode(codeMelli) {
if (codeMelli.length == 10) {
switch (codeMelli) {
case '0000000000':
case '1111111111':
case '2222222222':
case '3333333333':
case '4444444444':
case '5555555555':
case '6666666666':
case '7777777777':
case '8888888888':
case '9999999999':
return false;
}
var c = parseInt(codeMelli.charAt(9));
var sum = parseInt(codeMelli.charAt(0)) * 10 +
parseInt(codeMelli.charAt(1)) * 9 +
parseInt(codeMelli.charAt(2)) * 8 +
parseInt(codeMelli.charAt(3)) * 7 +
parseInt(codeMelli.charAt(4)) * 6 +
parseInt(codeMelli.charAt(5)) * 5 +
parseInt(codeMelli.charAt(6)) * 4 +
parseInt(codeMelli.charAt(7)) * 3 +
parseInt(codeMelli.charAt(8)) * 2;
r = sum - parseInt(sum / 11) * 11;
return (r == 0 && r == c) || (r == 1 && c == 1) || (r > 1 && c == 11 - r);
}
return false;
}

----------


## dalvand

سلام پست پایین را مشاهده کنید

----------


## hmahdavi921

var isValidNationalCode = function (input) {

if (!/^\d{10}$/.test(input)
            || input === '0000000000'
            || input === '1111111111'
            || input === '2222222222'
            || input === '3333333333'
            || input === '4444444444'
            || input === '5555555555'
            || input === '6666666666'
            || input === '7777777777'
            || input === '8888888888'
            || input === '9999999999')
            return false;
        var check = parseInt(input[9]);
        var sum = 0;
        var i;
        for (i = 0; i < 9; ++i) {
            sum += parseInt(input[i]) * (10 - i);
        }
        sum %= 11;
        return (sum < 2 && check === sum) || (sum >= 2 && check + sum === 11);
    };

----------

