کارت شناسایی ملی یا کارت ملی در ایران یک کارت هویتی است که به همه ایرانیان بالای ۱۵ سال اختصاص داده میشود.
با توجه به پیشرفت روزافزون علوم کامپیوتری و وارد شدن این علوم در تمامی کارهای روزانه فردی، روز به روز بر حجم دادههای کامپیوتری اضافه میگردد لذا لزوم رعایت نکات استاندارد در جمعآوری این دادهها در قالب یک بانک اطلاعاتی یک اصل مهم میباشد. یکی از اصول ساختارهای بانکهای اطلاعاتی استفاده از کدهای منحصر بفرد در جمعآوری اطلاعات بوده و وقتی این اطلاعات مربوط به افراد جامعه باشد، کد ملی بهترین کد منحصربهفرد میباشد.
در کشور ما نیز بیش از دو دهه است که در بسیاری از فعالیتها شماره ملی به عنوان یک سند و یا مشخصه مورد استفاده قرار میگیرد. اگر شما استفاده کننده از این کد چه به صورت کامپیوتری یا فیزیکی هستید، تشخیص صحیح بودن این کد بسیار دارای اهمیت بوده لذا بهتر است ساختار صحیح این کد و روش صحت سنجی آن را بدانید.
کد ملی شمارهای است ۱۰ رقمی که از سمت چپ سه رقم کد شهرستان محل صدور شناسنامه، شش رقم بعدی کد منحصربهفرد برای فرد دارنده شناسنامه در شهرستان محل صدور و رقم آخر آن هم یک رقم کنترل است که از روی ۹ رقم سمت چپ بهدست میآید. برای راستیآزمایی کد کافی است از روی ۹ رقم سمت چپ رقم کنترل را محاسبه کرده و برابر بودن آن با آخرین رقم از سمت راست را بررسی کنیم.
ثبت احوال کشور در راستای ارائه کارت ملی روشی را برای تولید کدهای ملی استفاده نموده و رابطهای بین رقمهای شماره ملی برقرار کرده است که برای بررسی کنترل این کد کافی است چند محاسبه ساده عملیاتی و منطقی را انجام دهید.
به منظور بررسی صحت کد ملی، هر یک از ارقام این شماره دارای موقعیت یا ضریب خاص خود بوده که با اعداد ۲ تا ۱۰ نمایش داده میشود و به شرح زیر میباشد (به عنوان مثال برای کد ملی ۰۹۳۹۶۸۵۷۳۶):
برای بررسی این رابطه مراحل زیر را به ترتیب میتوانید انجام دهید:
۱. در مرحله اول باید بررسی بر روی تعداد کاراکترها را انجام دهید، از آنجایی که در سیستم کد ملی معمولاً قبل از کد تعدادی صفر وجود دارد (رقم اول و رقم دوم از سمت چپ کد ملی ممکن است صفر باشد) و در بسیاری از موارد ممکن است کاربر این صفرها را وارد نکرده باشد و یا نرم افزار این صفرها را ذخیره نکرده باشد بهتر است قبل از هر کاری در صورتی که طول کد بزرگتر مساوی ۸ و کمتر از ۱۰ بود به تعداد لازم (یک تا دو تا صفر) به سمت چپ عدد اضافه کنید.
۲. در مرحله دوم بعد از اطمینان از ۱۰ رقم بودن شماره ملی، ضرایب ۲ الی ۱۰ را در ۹ رقم سمت چپ شماره ملی نظیر به نظیر ضرب کرده و سپس تمامی اعداد را جمع میکنیم.
(2*3)+(3*7)+(4*5)+(5*8)+(6*6)+(7*9)+(8*3)+(9*9)+(10*0)=291
مجموع بدست آمده از مرحله دو را بر عدد ۱۱ تقسیم میکنیم و باقیمانده آن را محاسبه میکنیم. (۵ = ۱۱ / ۲۹۱)
باقیمانده تقسیم برابر ۵ میباشد.
اگر باقیمانده کمتر از ۲ باشد، رقم کنترل ( رقم سمت راست شماره ملی) باید برابر باقیمانده این تقسیم باشد. یعنی یا صفر و یا یک، که در این مثال ۵ میباشد و شامل حالت اول نمیگردد پس باید حالت دوم را مد نظر قرار داد.
اگر عدد باقیمانده تقسیم بزرگتر مساوی ۲ باشد عدد ۱۱ را منهای باقیمانده تقسیم مرحله قبل میکنیم، حال باید عدد حاصل شده برابر رقم کنترل(رقم سمت راست کد ملی) باشد.
برای این مثال: ۶ = ۵ – ۱۱ بوده پس باید رقم کنترلی کد ملی برابر ۶ باشد که نتیجه میگیریم شماره ملی صحیح است.
در صورتی که یکی از این دو حالت را نداشته باشیم شماره ملی صحیح نمیباشد.
نکته: لازم به ذکر است کدهای ملی که همه ارقام آنها مثل هم باشند معتبر نیستند.
جهت بررسی اینکه آیا شماره ملی وارد شده معتبر است یا خیر از الگوریتم صحت شماره ملی بهره میبریم. در اینجا با دو روش این بررسی را انجام میدهیم.
در روش اول میتوان برای تکتک مراحل فوق جهت پیادهسازی و بررسی اعتبار سنجی کد ملی در نرمافزار اکسل تابع تعریف نمود تا صحت کد ملی بررسی گردد. جهت این کار برای مراحل زیر میتوانید از فرمولهای پیشفرض اکسل استفاده نمایید:
۱. شمارش تعداد کاراکترها یک سلول تابع LEN
۲. جدا کردن کاراکترها از یک رشته MID
۳. بررسی شرطی حالتهای مختلف IF
۴. باقیمانده یک تقسیم MOD
نمونه محاسبات با کمک توابع در اکسل:
=IFERROR(IF(AND(LEN($G$7)=10,AND(LEFT($G$7,10)<>REPT(ROW(1:9),10)),OR(AND(MOD(SUM(MID($G$7,ROW(1:9),1)*(11-ROW(1:9))),11)<2,--RIGHT($G$7)=MOD(SUM(MID($G$7,ROW(1:9),1)*(11-ROW(1:9))),11)),--RIGHT($G$7)=(11-MOD(SUM(MID($G$7,ROW(1:9),1)*(11-ROW(1:9))),11)))),TRUE,FALSE),FALSE)
در روش دوم شما میتوانید مراحل بالا را در قالب کدنویسی ویژوال بیسیک در محیط اکسل نیز انجام دهید.
نمونه محاسبات با کمک VBA:
Function ISMELLICODE(CodeMelli As String) As Boolean ' Code written by: Excel Iran Team - Amir Ghasemiyan Dim first_number As Integer, num As Integer, counter As Integer, s As Integer, r As Integer, i As Integer If IsNumeric(CodeMelli) And Len(CodeMelli) = 10 Then first_number = Left(CodeMelli, 1) For i = 1 To 9 num = Mid(CodeMelli, i, 1) If num = first_number Then counter = counter + 1 s = s + num * (11 - i) Next i r = s Mod 11 If r > 1 Then r = 11 - r If r = Val(Right(CodeMelli, 1)) And counter < 9 Then ISMELLICODE = True End If End Function
در فایل پیوست در دو شیت جداگانه با دو روش فرمول نویسی در خود محیط اکسل و کدنویسی در VBA قادر خواهید بود صحت کد ملی وارد شده را بررسی کرده و نیز با توجه به بانک اطلاعاتی کد ملی شهرهای مختلف ایران، مشخص کنید کد ملی وارد شده مربوط به کدام شهر از کدام استان کشور عزیزمان ایران میباشد.
Download “تشخیص صحت کد ملی” Melli-Code-Checker.xlsm – 14738 بار دانلود شده است – 169,55 کیلوبایت
[1] wikipedia
25 دیدگاه ها
سلام دوست عزیز این فایلی که ارسال کردید با کد وی بی خطا می ده
کد ملی زیر رو در برنامه تون چک کنید:
۲۵۹۵۳۰۷۸۱۹
با وی بی میگه اشتباهه در صورتی که با فرمول نویسی میگه درسته
سلام دوست عزیز
سپاس از توجه شما. بله متاسفانه در کد اشتباهی رخ داده بود. به کمک شما مشکل رفع شد. مشکل در خط ۱۲ بود.
سلام مهندس ممکنه لطف کنی بفرمایید کجای خط 12 را اطلاح کینم ؟
کل خط ۱۲ دوست عزیز
سلام
ممنون خیلی عالی بود
فعلا که درست کار می کند
با سلام خدمت حضار و اساتید محترم
این کد که محبت کردین فقط در برنامه شارسالی شما کار میکنه وقتی به جای دیگه کپی و با اصلاح جایگذاری میشه جواب نمیده مثلا میخوام در شیت personels سل B5 جایگذاری کنم. لطفا راهنمائی بفرمائید
سلام دوست عزیز
شما باید کدهای مربوطه را در فایل مقصد کپی بفرمایید. برای اینکار با کلید ترکیبی Alt+ F11 وارد محیط ویژوال بیسیک شوید. در پنجره project explorer در پوشه modules این فایل یک ماژول وجود دارد. آن را با درگ کردن به فایل مقصد خود انتقال دهید.
درود بر شما
لطفا اگر فایل کد های ملی که با۲۷۴و ۲۷۵ شروع می شود را دارید ارسال بفرمایید با تقدیر از زحمات شما
با سلام و روز بخیر
اموزش و توضیحات شما بسیار کامل و خوب و دقیق بود.
با تشکر فراواااااااان.
با سلام و وقت بخیر من اگر در اکسل بخوام صحت سنجی شماره موبایل رو انجام دهم امکان پذیر هست؟ یه ستون دارم که شماره موبایل داره میخام اگه فرمت صحیحی نداره و اشتباهه برای من مشخص کنه …شما میتونین کمکم کنید
سلام دوست عزیز
فقط میتوان مشخص کرد آیا تعداد ارقام صحیح هست یا نه و آیا شماره با ۰۹ شروع شده یا نه
برای دریافت پاسخ بهتر و کاملتر لطفا به انجمن مراجعه بفرمایید
https://forum.exceliran.com/forumdisplay.php/125-%D9%BE%D8%B1%D8%B3%D8%B4-%D9%88-%D9%BE%D8%A7%D8%B3%D8%AE-Questions-and-Answers
برای کد ملی تهران خطا میده. اونایی که اولش دوتا صفر دارن.
برای همه کدهای ملی با دو صفر خطا میده؟
فرمت سلول مربوطه باید به صورت TEXT باشد تا صفر اول کد ملی را حذف نکند
=IFERROR(IF(AND(LEN($G$7)=10,AND(LEFT($G$7,10)REPT(ROW(1:9),10)),OR(AND(MOD(SUM(MID($G$7,ROW(1:9),1)*(11-ROW(1:9))),11)<2,–RIGHT($G$7)=MOD(SUM(MID($G$7,ROW(1:9),1)*(11-ROW(1:9))),11)),–RIGHT($G$7)=(11-MOD(SUM(MID($G$7,ROW(1:9),1)*(11-ROW(1:9))),11)))),TRUE,FALSE),FALSE)
این کد رو کجای اکسل باید وارد کنیم؟ تو ولیدیشن نمیشه
سلام دوست عزیز
داخل یک سلول
به فایل پیوست مراجعه بفرمایید
سلام عرض ادب. تشکر از اینکه بدون منت و هزینه به همه کمک کردید . جسارتا چون
تو نرم افزار تحت اکسلی که دارم ازش استفاده کردم . آیا کاملا درست کار میکنه و هیچ خطایی نمیده؟
سلام دوست عزیز
تا اینجا که موردی نبوده. ان شالله که در آینده هم خطایی نخواهد داشت
با سلام، ممنون از سایت خوبتون.
فرض کنیم که من 50 تا پرسنلی دارم که کد ملی هاشون در اکسل و در ردیف هایی نوشته شده است. میخواهم این کد را جلوی هر سلولی کپی کنم و نتیجه رو برای همه ببینم.
آیا امکانش هست فرمول رو تغییر بدهید که مثل فرمول های ساده تر به ازای هر ردیف نتیجه بر گرداند؟
سلام دوست عزیز
شما کافیه کدهای ویژوال بیسیکی که ارائه شده را داخل یک ماژول کپی کنید و در سلول مورد نظرتون (در محیط اکسل) از فرمول زیر استفاده کنید:
=ISMELLICODE(A1)
ذکات علم نشر آن است
دمت گرم آقای قاسمیان عزیز
سلام
بسیار عالی بود
ممنونم
سلام مهندس عزیز
از راهنمائی ارزشمندتون خیلی استفاده کردم ممنون
سلام. ممنون استاد. در مورد شناسه ملی شرکت ها چطور؟
سلام. نمیدونم شناسه ملی ساختار داره یا نه. اگه داشته باشه میتونیم برای اون هم تعریف کنیم