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

## erfannew

سلام دوستان 
من خیلی برای فرمول* برسی کد ملی* جاوا اسکریپت سرچ کردم ولی متاسفانه همه اونهایی که دیدم در عمل کار نمی کردند.

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

مرسی

----------


## erfannew

لطفا جاواسکریپت نویسی ها کمک کنند ؟

----------


## erfannew

کسی خونه نیست ؟

----------


## mr.zenith

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

----------


## erfannew

ممنون ولی دوستان آماده ندارند ؟

----------


## Ehsan.PHP

من یه کد دارم ولی با همه مرورگرها غیر از Internet Explorer مشکل داره. اون هم اینه که وقتی دکمه ارسال رو توی بقیه مرورگر ها میزنم از کد ملی خطا نمی گیره (اگر اشتباه باشه) ولی توی اینترنت اکسپلورر خطا می گیره (اگر کد ملی اشتباه باشه) دوستان اگر  مشکل راحل بکنند کد خوبی هست.

----------


## AMIBCT

برای بررسی صحت کد ملی لازمه که 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

> برای بررسی صحت کد ملی لازمه که checksum عددهای اول تا نهم محاسبه بشه
> و صرفا بررسی عددها و فرمت کفایت نمی‌کنه
> 
> function checkMelliCode(varmellicode) {
> 	var meli_code;
> 	meli_code = varmellicode.value;
> 	if (meli_code.length == 10) {
> 		if (meli_code == '1111111111' ||
> 			meli_code == '0000000000' ||
> ...


اگر بخواهیم اینطوری تست کنیم که 1000 مدل میشه درست کرد

----------


## erfannew

ممنون ولی این کد را من گفتم اول تست کنید بعد بگین 
این کد که کار نمی کنه ؟! ایرادات داره !

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

----------


## AMIBCT

> اگر بخواهیم اینطوری تست کنیم که 1000 مدل میشه درست کرد


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

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




> این کد که کار نمی کنه ؟! ایرادات داره !


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

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

----------


## erfannew

بله ، می دونم ،ممنون از راهنمایی 
ولی این کد جواب نمی دهد
مثلا شما در یک فایل html تست کنید و یه کد اشتباه بدید ، می بینید که آلرت یا هشدار نمیده !
ممنونم .

----------


## mr.zenith

دوست عزیز شما خودت جاوا اسکریپت بلدی؟؟؟
یک کد بنویسید که طول داده ی ورودی اگر کمتر از 11 بود اعلام کنه. با text.lenght
یک کد هم بنویسید که هر کجا کارکتری غیر از عدد بود اعلام کنه با x.indexOf("")
هر وقت هم مثلا 1111111 یا 555555 وارد شد اعلام کنه
همین تمام شد
دیگه شما نمی توانی بیای از ثبت اسناد تاییدیه بگیری که این کد درسته یا نه.
هر کد دیگه ای هم باشه همین شکلیه مثل کد پستی شماره شناسنامه و....

----------


## erfannew

نه آخه به اون راحتی هم نیست واگر نه راحت می نوشتمش ، ولی فرمولش حرفه ای تر از این حرفاست ؟
من جاوا اسکریپت بلدم ولی یه جاهاییش گیر کردم ، واسه همین خواستم دوستان کمک کنند .

----------


## AMIBCT

دوست عزیز کد مشکلی نداره
تنها اشکالی که دیدم یه { در انتهای تابع جا مونده بود

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

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



```
<!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

برای دوستانی که جدید به این تاپیک میان

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

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

----------

