صفحه شخصی محمد مهدی مدرس نیا   
 
نام و نام خانوادگی: محمد مهدی مدرس نیا
استان: اصفهان - شهرستان: اصفهان
رشته: کارشناسی عمران - پایه نظام مهندسی: یک
شغل:  محاسب وناظر
شماره نظام مهندسی:  20-300-03321
تاریخ عضویت:  1389/01/02
 روزنوشت ها    
 

 تشخیص صحت کد ملی. بخش عمومی

9

امروزه در اکثر نرم افزارهای تولیدی نیاز به استفاده از کد ملی به عنوان یک مشخصه منحصر به فرد برای اطلاعات فردی می باشد.
از طرفی متاسفانه در حال حاضر هیچ الگوریتمی برای تشخیص صحت کد ورودی در اختیار برنامه نویسان وجود ندارد.اخیرا با توجه به نیاز خودم به کنترل صحت کد ورودی الگوریتم مربوط به کنترل صحت کد ملی را بدست آوردم و چون مطمئن هستم افراد زیادی هم همین نیاز را دارند روال انجام کار را در این مقال توضیح می دهم.
کد ملی شماره ای است 10 رقمی که از سمت چپ سه رقم کد شهرستان محل صدور شناسنامه ، شش رقم بعدی کد منحصر به فرد برای فرد دارنده شناسنامه در شهرستان محل صدرو و رقم آخر آن هم یک رقم کنترل است که از روی 9 رقم سمت چپ بدست می آید. برای بررسی کنترل کد کافی است مجدد از روی 9 رقم سمت چپ رقم کنترل را محاسبه کنیم.
از آنجایی که درسیستم کد ملی معمولا قبل از کد تعدادی صفر وجود دارد.(رقم اول و رقم دوم از سمت چپ کد ملی ممکن است صفر باشد) و در بسیاری از موارد ممکن است کاربر این صفرها را وارد نکرده باشد و یا نرم افزار این صفرها را ذخیره نکرده باشد بهتر است قبل از هر کاری در صورتی که طول کد بزرگتر مساوی 8 و کمتر از 10 باشد به تعداد لازم (یک تا دو تا صفر) به سمت چپ عدد اضافه کنید.

1- برای محاسبه رقم کنترل از روی سایر ارقام ، هر رقم را در موقعیت آن ضرب کرده و حاصل را با هم جمع می کنیم.

2- مجموع بدست آمده از مرحله یک را بر 11 تقسیم می کنیم.

3- اگر باقیمانده کمتر از 2 باشد ، رقم کنترل باید برابر باقیمانده باشد در غیر اینصورت رقم کنترل باید برابر یازده منهای باقیمانده باشد.

مثال : آیا کد 7731689951 یک کد ملی معتبر است؟
حاصل جمع ضرب ارقام 2 الی 10 را در موقعیت آنها محاسبه می کنیم:
7*10+7*9+3*8+1*7+6*6+8*5+9*4+9*3+5*2=313
313÷11=28 و R=5

چون باقیمانده برابر 5 و بزرگتر مساوی 2 است پس باید رقم کنترل این کد برابر 6 ( یازده منهای 5 برابر 6 )باشد.
با دقت در کد متوجه می شویم که رقم کنترل ورودی برابر 1 است پس کد مورد نظر به عنوان یک کد معتبر قابل قبول نیست!!

یکشنبه 31 شهریور 1392 ساعت 09:25  
 نظرات    
 
a a 21:33 یکشنبه 31 شهریور 1392
0
 a a
به نظر من بهتره یه بازنگری تو این مقالتون داشته باشید, چون کاملا" اشتباهه.
سید هادی علوی کیا 22:10 یکشنبه 31 شهریور 1392
0
 سید هادی علوی کیا
سلام جالب بود.این مکانیسم را چطور متوجه شدید؟!!!
مهدی ابراهیمی 08:02 دوشنبه 1 مهر 1392
0
 مهدی ابراهیمی
سلام
آقا من متوجه نشدم منظور شما از موقعیت ارقام چیست. در مثال هم قابل درک نمی باشد. لطفا بیشتر توضیح دهید. ممنون
احمد انصاری 09:06 دوشنبه 1 مهر 1392
0
 احمد انصاری
متشکر حتما قابل استفاده خواهد بود.
محسن نیک 09:39 دوشنبه 1 مهر 1392
0
 محسن نیک
سلام. به نظر میاد مثال زده شده اشتباه باشه . چرا که اعداد و موقعیت انها در حاصل جمع و ضرب ارقام مبهمه . ممنون میشم توضیح بیشتری بدین
مائده علیشاهی 15:57 دوشنبه 1 مهر 1392
0
 مائده علیشاهی
منم درست نفهمیدم
محمد مهدی مدرس نیا 09:41 چهارشنبه 3 مهر 1392
0
 محمد مهدی مدرس نیا
توضیح مختصر:
اگر اعداد کدملی را از راست به چپ شماره گذاری کنیم
برای مثال قوق داریم:
7*10+7*9+3*8+1*7+6*6+8*5+9*4+9*3+5*2=313

313÷11=28 و R=5

چون باقیمانده برابر 5 و بزرگتر مساوی 2 است پس باید رقم کنترل این کد برابر 6 ( یازده منهای 5 برابر 6 )باشد.
با دقت در کد متوجه می شویم که رقم کنترل ورودی برابر 1 است پس کد مورد نظر به عنوان یک کد معتبر قابل قبول نیست!!
لینک زیر نیز قابل استفاده میباشد:
http://aliarash.com/article/codemeli/codemeli.htm
محمد مهدی مدرس نیا 12:21 چهارشنبه 3 مهر 1392
0
 محمد مهدی مدرس نیا
چرا محاسبات بر عکس میشه ؟؟؟!!!
صحیحش: 7ضربدر 10 به اضافه 7ضربدر 9 باضافه3 ضربدر 8 باضافه 1 ضربدر 7 باضافه 6 ضربدر 6 ....5ضربدر 2 که حاصل این میشود313