رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
فرمول تشخیص صحت کد ملی (کارت ملی شناسایی)
#1
سلام. این مطلب رو در چند سایت مختلف دیدم، اما هیچ کدام منبع یکسانی رو معرفی نکردند البته گفته شده که سازمان ثبت احوال کشور این فرمول رو ارائه داده. و اما اصل مطلب:

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

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

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

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

۰۰۰۰۰۰۰۰۰۰
۱۱۱۱۱۱۱۱۱۱
۲۲۲۲۲۲۲۲۲۲
۳۳۳۳۳۳۳۳۳۳
۴۴۴۴۴۴۴۴۴۴
۵۵۵۵۵۵۵۵۵۵
۶۶۶۶۶۶۶۶۶۶
۷۷۷۷۷۷۷۷۷۷
۸۸۸۸۸۸۸۸۸۸
۹۹۹۹۹۹۹۹۹۹

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

دهمین رقم شماره ملی را ( از سمت چپ ) به عنوان 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;
}
parseInt(meli_code.charAt(9));
parseInt(meli_code.charAt(0))*10 +
parseInt(meli_code.charAt(1))*+
parseInt(meli_code.charAt(2))*+
parseInt(meli_code.charAt(3))*+
parseInt(meli_code.charAt(4))*+
parseInt(meli_code.charAt(5))*+
parseInt(meli_code.charAt(6))*+
parseInt(meli_code.charAt(7))*+
parseInt(meli_code.charAt(8))*2;
parseInt(n/11)*11;
if ((
== && == c) || (== && == 1) || (&& == 11 r))
{
return 
true;
}
else
{
alert(”کد ملی صحیح نمی باشد”);
objcode.focus();
return 
true;
}
}
else
{
return 
true;




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

http://www.vvolf.net/vvolf-2011-01-12.tar.gz

دانلود فایل نمونه تشخیص صحت ملی
http://up.iranblog.com/images/tnym6gac01jdaxrsmvy4.zip
دانلود تابع در قالب xla
http://up.iranblog.com/images/b08oqvlkj7d7895ghuhc.zip
[عکس: www.Mojsazan.com.gif]
پاسخ
سپاس شده توسط ehsan.eba
#2
همان طور كه مي دانيد كد ملي از 10 رقم تشكيل شده كه سه رقم اول مربوط به كد شهرستان 6 رقم دوم يه عدد منحصر به فرد هست و رقم آخر هم براي تاييد صحت كد ملي مورد استفاده قرار مي گيره حالا من مي خوام كد شهرستان هاي مختلف رو در يك ليست جمع آوري كنم

توجه كنيد در تهران همه متولدين سال 68 اولشون 001 هست بلااستثنا یا اصفهان 67 68 ها همگی 127 می باشند
پس اين يه ربطيم به سال تولد بايد داشته باشه


شيراز=229،230
تهران=001،004،006،007،008
آمل=214
نور=625
جهرم= 246
تبريز =138
هشترود ميانه مراغه =136
زاهدان= 611
127 اصفهان
128 اطراف اصفهان
چادگان-اصفهان 575
تیران وکرون-اصفهان 549
نجف آباد-اصفهان 109
رشت 258
قزوین، 432
175 اهواز
مشهد=092
ساری=208
فیروز کوه=043
236 برا کازرون


منبع
[عکس: www.Mojsazan.com.gif]
پاسخ
سپاس شده توسط مهدی ابراهیمی ، ehsan.eba
#3
سلام مهرداد جان
ممنون از مطلب خوبی که ارائه دادی . ولی من یه سوال داشتم و این هم این است که منظورت از این که سه رقم اول کد ملی به سال تولد ربط داره چیه ؟
اگر می شه توضیحات بیشتری بدهید.
ممنون
پاسخ
سپاس شده توسط
#4
در شهر ها مختلف عدد ها هماهنگی ندارند در طی تحقیقات متوجه شدیم که سال تولد در عدد شروع تاثیر دارد در بعضی شهر ها
[عکس: www.Mojsazan.com.gif]
پاسخ
سپاس شده توسط


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  لیست فرمول های ریاضی ehsan.eba 3 1,192 04-21-2012, 10:16 PM
آخرین ارسال: ehsan.eba
  کارت گرافيکي بيسيم مهرداد عباسی 0 703 01-15-2011, 04:59 PM
آخرین ارسال: مهرداد عباسی

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان