PDA

View Full Version : صحت درست بودن کد ملی با جاوا اسکریپت



hamidhassas
شنبه 10 فروردین 1392, 18:51 عصر
یک کد در پیدا کردم که با اون میشه کد ملی رو چک کرد اما مشکلم اینه که میخوام به کد دیگه ای ادقامش کنم اما نمیدونم چطوری ؟

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


<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
دوشنبه 12 فروردین 1392, 14:52 عصر
:متفکر::متفکر::متفکر::متفکر:: تفکر::متفکر::متفکر:

sali444
دوشنبه 12 فروردین 1392, 18:02 عصر
آی آر نیک اسکریپتشو داره
میتونی بکشی بیرون
البته مطمعن نیسم کلاینت باشه

hamidhassas
دوشنبه 12 فروردین 1392, 20:49 عصر
:متفکر::متفکر::متفکر::متعجب:: تفکر:

hamidhassas
پنج شنبه 15 فروردین 1392, 14:16 عصر
من که سر در نمیارم گه چکار باید بکنم

sali444
پنج شنبه 15 فروردین 1392, 18:06 عصر
توی سایت 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
پنج شنبه 15 فروردین 1392, 18:13 عصر
پست دوبار ثبت شد...
امکان حذفم که نیست...

hamidhassas
پنج شنبه 15 فروردین 1392, 19:34 عصر
وقتی که کد 10 رقمی وارد میشه و معتبر نیست پیغام خطا به نمایش در می آید اما عملیات متوقف نمیشه و اطلاعات به دیتابیس ارسال میشه

hamidhassas
سه شنبه 20 فروردین 1392, 08:59 صبح
:متفکر::متفکر:

dalvand
سه شنبه 03 آذر 1394, 10:48 صبح
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
سه شنبه 03 آذر 1394, 10:54 صبح
سلام پست پایین را مشاهده کنید

hmahdavi921
یک شنبه 30 اردیبهشت 1397, 11:11 صبح
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);
};