PDA

View Full Version : آموزش: فرمول تشخیص صحت کد ملی



AmirRezanezhad
چهارشنبه 09 بهمن 1392, 22:21 عصر
همانطور که می دانید همه ارگانها و سازمانهای دولتی جمهوری اسلامی و شرکتهای تابعه موظف شده اند از

این پس فیلد جدیدی در کنار مشخصات افراد به نام کد ملی درج نمایند و تقریبا همه هموطنان عزیز در حال حاضر کارت ملی را دارند. ولی ما به عنوان یک برنامه نویس وقتی در فرمی کد ملی را دریافت می کنیم چگونه از صحت کد وارد شده مطمئن شویم.

سازمان ثبت احوال کشور در راستای ارائه کارت ملی روشی را برای تولید کدهای ملی استفاده نموده است که با استفاده از آنها می توانیم کدهایی داشته باشیم که از امنیت بالایی برخوردار باشند و همچنین قابلیت تقلب نداشته باشند.

همه کدهای ملی ۱۰ رقمی هستند.


کدهای ملی که همه ارقام آنها مثل هم باشند معتبر نیستند مثل


۰۰۰۰۰۰۰۰۰۰

۱۱۱۱۱۱۱۱۱۱

۲۲۲۲۲۲۲۲۲۲

۳۳۳۳۳۳۳۳۳۳

۴۴۴۴۴۴۴۴۴۴

۵۵۵۵۵۵۵۵۵۵

۶۶۶۶۶۶۶۶۶۶

۷۷۷۷۷۷۷۷۷۷

۸۸۸۸۸۸۸۸۸۸

۹۹۹۹۹۹۹۹۹۹


روش اعتبار سنجی کد ملی :

دهمین رقم شماره ملی را ( از سمت چپ ) به عنوان A در نظر می گیریم.

یک مقدار B در نظر می گیریم و آن را برابر با =

(اولین رقم * ۱۰) + ( دومین رقم * ۹ ) + ( سومین رقم * ۸ ) + ( چهارمین رقم * ۷ ) + ( پنجمین رقم * ۶) + ( ششمین رقم * ۵ ) + ( هفتمین رقم * ۴ ) + ( هشتمین رقم * ۳ ) + ( نهمین رقم * ۲ )

قرار می دهیم.


مقدار C را برابر با = B – (B/11)*11 قرار می دهیم.


اگر مقدار C برابر با صفر باشد و مقدار A برابر C باشد کد ملی صحیح است.

اگر مقدار C برابر با ۱ باشد و مقدار A برابر با ۱ باشد کد ملی صحیح است.

اگر مقدار C بزرگتر از ۱ باشد و مقدار A برابر با ۱۱ – C باشد کد ملی صحیح است.


در پایان یک نمونه کد جاوا اسکریپت جهت چک کردن کد ملی تقدیم می گردد //

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;
}
برگرفته از سایت(http://www.irandevelopers.com/progra...8709251705-881)

korosh00
چهارشنبه 09 بهمن 1392, 23:33 عصر
تشکر حالا چطور برای هر کسی کد درست میشه ؟
فرمول درست کردن کد ملی چجوریه ؟
ممنون

mjsqts
پنج شنبه 10 بهمن 1392, 11:46 صبح
مقدار c همیشه صفر میشه
به فرمولت نیگاه کن!
در واقع جواب فرمولت میشه b-b و b هر مقداری داشته باشه منهای خودش میشه صفر
احتمالا یجایی اشتباه کردی

AmirRezanezhad
پنج شنبه 10 بهمن 1392, 12:13 عصر
http://www.uplooder.net/img/image/58/cf8700418a163622c98a914945b4f8aa/daszarrin-ir_sehhate_kode_melli.png
اگر مقدار C برابر با صفر باشد و مقدار A برابر C باشد، کد ملی صحیح است.
اگر مقدار C برابر با ۱ باشد و مقدار A برابر با ۱ باشد، کد ملی صحیح است.
اگر مقدار C بزرگتر از ۱ باشد و مقدار A برابر با ۱۱ – C باشد، کد ملی صحیح است.

AmirRezanezhad
پنج شنبه 10 بهمن 1392, 12:19 عصر
این تقسیم اعشاری نیست تقسیم صحیح هستش

mjsqts
شنبه 12 بهمن 1392, 10:19 صبح
حالا درست شد
تقسیم صحیح باشه کار میکنه
دست شما درد نکنه
مطلبت مفید بود

moeinmohebbi
جمعه 18 بهمن 1392, 15:51 عصر
کپی پیست بدون ذکر منبع کار جالبی نیست.
http://www.irandevelopers.com/programming/fomulacodemelli8709251705-881
اینجا (http://www.irandevelopers.com/programming/fomulacodemelli8709251705-881/) دقیقا همین مطلب رو با همین جملات !!! سه سال پیش گذاشته !!!

AmirRezanezhad
جمعه 18 بهمن 1392, 18:52 عصر
:چشمک:ok...sorry

Hojjatrashednezhad
شنبه 15 آذر 1393, 21:44 عصر
عالی بود !!!!!!!!!!!!!!!!

korosh00
یک شنبه 16 آذر 1393, 10:06 صبح
سلام
من کد بالا رو چجوری به یک کلید یا تک باکس نسبت بدم توسی شارپ