PDA

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



erfannew
پنج شنبه 30 تیر 1390, 16:58 عصر
سلام دوستان
من خیلی برای فرمول برسی کد ملی جاوا اسکریپت سرچ کردم ولی متاسفانه همه اونهایی که دیدم در عمل کار نمی کردند.

ممنون میشم دوستان ماهر تر ، بتونن فرمولی را بدن و البته تست شده .

مرسی

erfannew
یک شنبه 02 مرداد 1390, 16:41 عصر
لطفا جاواسکریپت نویسی ها کمک کنند ؟

erfannew
سه شنبه 04 مرداد 1390, 00:12 صبح
کسی خونه نیست ؟

mr.zenith
سه شنبه 04 مرداد 1390, 01:06 صبح
سلام
باید چندتا دستور شرطی بنویسی تا اطلاعات را چک کنه
مثلا تعداد ارقام و اینکه حروف یا کارکتر دیگه ای غیر عدد نزده باشه

erfannew
سه شنبه 04 مرداد 1390, 02:55 صبح
ممنون ولی دوستان آماده ندارند ؟

Ehsan.PHP
سه شنبه 04 مرداد 1390, 11:28 صبح
من یه کد دارم ولی با همه مرورگرها غیر از Internet Explorer مشکل داره. اون هم اینه که وقتی دکمه ارسال رو توی بقیه مرورگر ها میزنم از کد ملی خطا نمی گیره (اگر اشتباه باشه) ولی توی اینترنت اکسپلورر خطا می گیره (اگر کد ملی اشتباه باشه) دوستان اگر مشکل راحل بکنند کد خوبی هست.

AMIBCT
سه شنبه 04 مرداد 1390, 12:20 عصر
برای بررسی صحت کد ملی لازمه که checksum عددهای اول تا نهم محاسبه بشه
و صرفا بررسی عددها و فرمت کفایت نمی‌کنه

function checkMelliCode(meli_code) {
if (meli_code.length == 10) {
if (meli_code == '1111111111' ||
meli_code == '0000000000' ||
meli_code == '2222222222' ||
meli_code == '3333333333' ||
meli_code == '4444444444' ||
meli_code == '5555555555' ||
meli_code == '6666666666' ||
meli_code == '7777777777' ||
meli_code == '8888888888' ||
meli_code == '9999999999') {
return false;
}
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)) {
return true;
} else {
return false;
}
} else {
return false;
}
}

mr.zenith
چهارشنبه 05 مرداد 1390, 01:28 صبح
برای بررسی صحت کد ملی لازمه که checksum عددهای اول تا نهم محاسبه بشه
و صرفا بررسی عددها و فرمت کفایت نمی‌کنه

function checkMelliCode(varmellicode) {
var meli_code;
meli_code = varmellicode.value;
if (meli_code.length == 10) {
if (meli_code == '1111111111' ||
meli_code == '0000000000' ||
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("کد ملی صحیح نمی باشد");
objcode.focus();
return false;
}
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)) {
return true;
} else {
alert("کد ملی صحیح نمی باشد");
objcode.focus();
return true;
}
} else {
return true;
}
اگر بخواهیم اینطوری تست کنیم که 1000 مدل میشه درست کرد

erfannew
چهارشنبه 05 مرداد 1390, 01:38 صبح
ممنون ولی این کد را من گفتم اول تست کنید بعد بگین
این کد که کار نمی کنه ؟! ایرادات داره !

لطفا تست کنید ؟

AMIBCT
چهارشنبه 05 مرداد 1390, 09:43 صبح
اگر بخواهیم اینطوری تست کنیم که 1000 مدل میشه درست کرد

خودتون متوجه شدید که منظورتون چیه؟

این الگوریتم بررسی صحت کد ملی است
اگه شما دوست داری کد ملی رو از روی قیافه بررسی کنی و براتون اهمیت نداره که کد وارد شده درسته یا غلطه
هر طوری دوست داری برنامه بنویس


این کد که کار نمی کنه ؟! ایرادات داره !
دوست عزیز این یه تابع ساده هست
اگه کد درست باشه مقدار بازگشتی true خواهد بود

کد دو تا اشکال کوچیک داشت که اصلاحش کردم
دیگه از داخل تابع پیامی نشون داده نمی‌شه
و خودتون مقدار بازگشتی رو باید بررسی و در صورت نیاز پیام هشدار نشون بدید
با تغییرات جدید، به جای شیء input، متن کد ملی رو باید به تابع ارسال کنید

erfannew
پنج شنبه 06 مرداد 1390, 01:55 صبح
بله ، می دونم ،ممنون از راهنمایی
ولی این کد جواب نمی دهد
مثلا شما در یک فایل html تست کنید و یه کد اشتباه بدید ، می بینید که آلرت یا هشدار نمیده !
ممنونم .

mr.zenith
پنج شنبه 06 مرداد 1390, 03:15 صبح
دوست عزیز شما خودت جاوا اسکریپت بلدی؟؟؟
یک کد بنویسید که طول داده ی ورودی اگر کمتر از 11 بود اعلام کنه. با text.lenght
یک کد هم بنویسید که هر کجا کارکتری غیر از عدد بود اعلام کنه با x.indexOf("")
هر وقت هم مثلا 1111111 یا 555555 وارد شد اعلام کنه
همین تمام شد
دیگه شما نمی توانی بیای از ثبت اسناد تاییدیه بگیری که این کد درسته یا نه.
هر کد دیگه ای هم باشه همین شکلیه مثل کد پستی شماره شناسنامه و....

erfannew
پنج شنبه 06 مرداد 1390, 03:55 صبح
نه آخه به اون راحتی هم نیست واگر نه راحت می نوشتمش ، ولی فرمولش حرفه ای تر از این حرفاست ؟
من جاوا اسکریپت بلدم ولی یه جاهاییش گیر کردم ، واسه همین خواستم دوستان کمک کنند .

AMIBCT
پنج شنبه 06 مرداد 1390, 18:32 عصر
دوست عزیز کد مشکلی نداره
تنها اشکالی که دیدم یه { در انتهای تابع جا مونده بود

این هم یه نمونه از استفاده که به خوبی کار می‌کنه و کد ملی رو هم کیلویی ( فقط با بررسی شماره‌ها و طول )بررسی نمی‌کنه

اگه باز با این هم مشکلی دارید
نشون می‌ده که باید مطالعه‌تون رو بیشتر کنید و بعد شروع کنید به برنامه‌نویسی
توی برنامه‌نویسی مشکلات زیادی پیش میاد که اگه اطلاعات پایه‌تون ضعیف باشه به جایی نمی‌رسید و زود ناامید می‌شید


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta http-equiv="content-language" content="fa-IR" />
<title>AMIB</title>
<script type="text/javascript">//<!--
function checkMelliCode(meli_code) {
if (meli_code.length == 10) {
if (meli_code == '1111111111' ||
meli_code == '0000000000' ||
meli_code == '2222222222' ||
meli_code == '3333333333' ||
meli_code == '4444444444' ||
meli_code == '5555555555' ||
meli_code == '6666666666' ||
meli_code == '7777777777' ||
meli_code == '8888888888' ||
meli_code == '9999999999') {
return false;
}
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)) {
return true;
} else {
return false;
}
} else {
return false;
}
}
//-->
</script>
</head>

<body style="direction: rtl;">
<p>
<input id="national_code" type="text" /><br />
<button type="button" id="check" onclick="checkMelliCode( document.getElementById( 'national_code' ).value ) ? alert ( 'OK' ): alert ( 'Error' );">بررسی کد ملی</button>
</p>
</body>

</html>

amir001
شنبه 26 مهر 1393, 10:37 صبح
برای دوستانی که جدید به این تاپیک میان

یه نفر زحمت کشیده این کارو توی زبان های برنامه نویسی مختلف انجام داده

https://gist.github.com/ebraminio/5292017