PDA

نسخه کامل مشاهده نسخه کامل : فرمول تشخیص صحت کد ملی (کارت ملی شناسایی)



F A R H A D
03-02-2009, 11:00
سلام. این مطلب رو در چند سایت مختلف دیدم، اما هیچ کدام منبع یکسانی رو معرفی نکردند البته گفته شده که سازمان ثبت احوال کشور این فرمول رو ارائه داده. و اما اصل مطلب:

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

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

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

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

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

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

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

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

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

قرار می دهیم.


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


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

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

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


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




برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

کد بالا رو در دلفی پیاده سازی کردم و به صورت dll تهیه کردم که میتونید از لینک زیر دریافت کنید:
Size: 395 KB

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این هم تعریف تابع که ورودی اون کد ملی هست و در صورتی که کد وارد شده معتبر باشه true رو به عنوان نتیجه برمیگردونه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشید

picher_s
07-02-2009, 10:35
سلام.
یه اکتیو ایکس(که توسط ثبت احوال انتشار داده شده) و راهنما و نمونه برنامه برای صححت کد ملی در مسیر زیر الصاق کردم

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق و پیروز باشید.

F A R H A D
07-02-2009, 14:10
ممنون به خاطر اکتیوایکس دوست عزیز

در ضمن مطالب کامل تر دوستمونو در مسیر زیر میتونید پیدا کنید
این که دقیقا همین مطلب هست که اینجا کپی کردم! کامل تر نیست که
به هر حال ممنون

golabi2000
08-02-2009, 10:18
با تشکر از دوست عزیز : شاید مطالب زیر هم به دردتون بخوره




[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])

arasho2005
10-03-2009, 19:18
با تشكر خيلي دنبال اين الگوريتم بودم
راستي ميشه اين كد رو تو اكسس يا sql مستقيما استفاده كرد

gmuosavi
10-03-2009, 22:32
با تشکر از دوست عزیز : شاید مطالب زیر هم به دردتون بخوره

اشكال داره !

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

BaniSoft
11-03-2009, 12:37
دستان عزیز می تونید از لینک زیر سورس برنامه چند خطی کنترل صحت کد ملی را دریافت کنید



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید:5:

Mahdi_S_T
05-04-2009, 16:58
من برنامه کامل دلفی انرا نوشتم البته یکی دیگه از دوستان هم اینکار و کرده بود ولی کامل نبود و در بعضی موارد مشکل داشت.به هر حال اگه کسی لازم داشت بگه تا آپلود کنم

bankmaskan
03-05-2009, 11:18
سلام
ممنون میشم اگه برنامه ای که نوشتین آپلود کنین.

golabi2000
03-05-2009, 13:12
سلام
ميتونيد از اين سورس كد براي صحت كد ملي استفاده كنيد :



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

xxxtehiran
08-06-2011, 18:01
سلام. این مطلب رو در چند سایت مختلف دیدم، اما هیچ کدام منبع یکسانی رو معرفی نکردند البته گفته شده که سازمان ثبت احوال کشور این فرمول رو ارائه داده. و اما اصل مطلب:

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

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

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

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

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

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

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

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

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

قرار می دهیم.


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


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

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

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


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




برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

کد بالا رو در دلفی پیاده سازی کردم و به صورت dll تهیه کردم که میتونید از لینک زیر دریافت کنید:
Size: 395 KB

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این هم تعریف تابع که ورودی اون کد ملی هست و در صورتی که کد وارد شده معتبر باشه true رو به عنوان نتیجه برمیگردونه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشید

سلام برام جالبه اينهمه زحمت برای يه کد اشتباه تا حالا به اين کد دقت کرديد
B – (B/11)*11 =c
حاصل c هيچ موقع به جز صفر نخواهد بود
يه معادله سادست
طرفين را تقسيم بر 11 می کنيم
c/11=b/11-b/11
*11
c=b-b
c=0
به همين سادگی جالبتر اينکه اين کد تو همه سايتها کپی شده و هيچ کس به اين موضوع دقت نکرده لطفا قبل از اين که کد را از جايي کپی کنيد يه چکش بکنيد

pooria_googooli
08-06-2011, 18:13
دوست عزیز یعنی این همه آدم که نظر دادن به این موضوع دقت نکردن؟ این تقسیم اعشاری نیست تقسیم صحیح هستش . متوجه شدید؟

xxxtehiran
08-06-2011, 18:32
دوست عزیز یعنی این همه آدم که نظر دادن به این موضوع دقت نکردن؟ این تقسیم اعشاری نیست تقسیم صحیح هستش . متوجه شدید؟
دوست عزيز دقيقا دقت نکرده بودن فرمول صحيح c= b- Int(b/ 11) * 11
هستش و صحبت شما درسته پاسخ به صورت اعشاری محاسبه نشه جواب صحيح است

ensalar
19-11-2016, 04:21
این کد غلطه
هیچ وقت نتیجه c چیزی جز صفر نمیشه