PDA

View Full Version : مقاله: فرمول تشخيص صحت كد ملي



vbhamed
جمعه 21 فروردین 1388, 17:33 عصر
سلام

با استفاده از برنامه زير مي توانيد تشخيص دهيد كاربر كد ملي صحيحي را وارد نموده يا خير

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

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

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

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

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

یک مقدار B در نظر می گیریم و آن را برابر با =
(اولین رقم * ۱۰) + ( دومین رقم * ۹ ) + ( سومین رقم * ۸ ) + ( چهارمین رقم * ۷ ) + ( پنجمین رقم * ۶) + ( ششمین رقم * ۵ ) + ( هفتمین رقم * ۴ ) + ( هشتمین رقم * ۳ ) + ( نهمین رقم * ۲ )
قرار می دهیم.

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

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



Function CheckMelliCode(Melli_Code As String) As Boolean

Dim c@, n@, r@

If Len(Melli_Code) < 10 Then Melli_Code = String(10 - Len(Melli_Code), "0") & Melli_Code

If Melli_Code = "0000000000" Or _
Melli_Code = "1111111111" Or _
Melli_Code = "2222222222" Or _
Melli_Code = "3333333333" Or _
Melli_Code = "4444444444" Or _
Melli_Code = "5555555555" Or _
Melli_Code = "6666666666" Or _
Melli_Code = "7777777777" Or _
Melli_Code = "8888888888" Or _
Melli_Code = "9999999999" Then

Else

c = Val(Mid$(Melli_Code, 10, 1))

n = Val(Mid$(Melli_Code, 1, 1)) * 10 + _
Val(Mid$(Melli_Code, 2, 1)) * 9 + _
Val(Mid$(Melli_Code, 3, 1)) * 8 + _
Val(Mid$(Melli_Code, 4, 1)) * 7 + _
Val(Mid$(Melli_Code, 5, 1)) * 6 + _
Val(Mid$(Melli_Code, 6, 1)) * 5 + _
Val(Mid$(Melli_Code, 7, 1)) * 4 + _
Val(Mid$(Melli_Code, 8, 1)) * 3 + _
Val(Mid$(Melli_Code, 9, 1)) * 2

r = n - Int(n / 11) * 11

If (r = 0 And r = c) Or (r = 1 And c = 1) Or (r > 1 And c = 11 - r) Then CheckMelliCode = True

End If

End Function

Private Sub Command1_Click()

MsgBox CheckMelliCode("4591246361")

End Sub

majjjj
شنبه 22 فروردین 1388, 09:52 صبح
سلام حامد جان
ایا این فرمول یک فرمول تعریف شده توسط ثبت احوال هست یا اینکه یک فرمول کلی برای شماره های 10 رقمی هست چون من هم یکسری بارکد 10 رقمی دارم که میخواهم اعتبار اونهارو ازمایش کنم که فرمولشون رو ندارم

vbhamed
شنبه 22 فروردین 1388, 10:22 صبح
سلام حامد جان
ایا این فرمول یک فرمول تعریف شده توسط ثبت احوال هست یا اینکه یک فرمول کلی برای شماره های 10 رقمی هست چون من هم یکسری بارکد 10 رقمی دارم که میخواهم اعتبار اونهارو ازمایش کنم که فرمولشون رو ندارم

سلام

كد ملي با باركد فرق داره، 3 عدد اول نشانه كد شهر، 6 عدد بعدي كد شخص و عدد آخر رقم كنترل هست و اين فرمول فقط براي كد ملي هست

Hamed Hosseini
جمعه 25 اردیبهشت 1388, 02:38 صبح
خيلي عالي بود. برنامه ي كامپال شدش رو هم داريد؟

vbhamed
جمعه 25 اردیبهشت 1388, 04:12 صبح
سلام

اين سورس تابع هست
كامپايلش كه ديگه كاري نداره

soheilbehro
سه شنبه 16 تیر 1388, 20:21 عصر
می شه برنامه شو بگذاری من سر در نمی آورم لطفا

vbhamed
شنبه 20 تیر 1388, 23:19 عصر
می شه برنامه شو بگذاری من سر در نمی آورم لطفا

سلام

برنامش تو پست اول هست
اون تابع رو به برنامت اضافه كن و فراخواني كن، به همين سادگي

iranian-pc
شنبه 20 تیر 1388, 23:40 عصر
این هم لینک برنامه تشخیص صحت کد ملی و شماره شناسنامه های 10 رقمی میباشد

این برنامه کامپایل شده و با گرفیک خوب است


http://barnamenevis.org/forum/showthread.php?t=165073&highlight=%D9%85%D9%84%DB%8C

soheilbehro
چهارشنبه 15 مهر 1388, 22:29 عصر
این هم برنامه کمپایل شده همراه با سورس

emdadgar2
شنبه 19 دی 1388, 21:22 عصر
اینم کد جاوا اسکريپت

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;
}

rk1983xx
دوشنبه 29 آذر 1389, 15:11 عصر
سلام

كد ملي با باركد فرق داره، 3 عدد اول نشانه كد شهر، 6 عدد بعدي كد شخص و عدد آخر رقم كنترل هست و اين فرمول فقط براي كد ملي هست

سلام
میشه راهنمائی کنید از کجا می تونیم جدول کامل لیست شهر ها و کد های معادل رو استخراج کنیم ؟(جهت تبدیل کد به نام شهر)

programer20
چهارشنبه 22 دی 1389, 20:40 عصر
چه جوري ميشه كد ملي اشخاص حقوقي رو چك كرد؟
آخه من يه برنامه نوشتم كه بر اساس شناسه اشخاص حقوقي (كد ملي) اطلاعات رو ذخيره مي كنه. فقط مي دونم بايد 11 رقمي باشه

NasimBamdad
شنبه 27 خرداد 1391, 14:14 عصر
معادل C# رو نداری ؟

MohammadGh2011
شنبه 27 خرداد 1391, 14:38 عصر
معادل C#‎ رو نداری ؟
سلام عليکم
در تالار سي شارپ سوالتان را بپرسيد(البته قبلش جستجو کنيد فکر کنم کد سي شارپ هم باشه)
به تاريخ پست ها هم نگاهي بندازيد.آخرين پست اين تاپيک دو سال قبل ايجاد شده!



موفق باشيد

MohammadGh2011
شنبه 27 خرداد 1391, 14:40 عصر
لينک زير رو ببينيد:
http://barnamenevis.org/showthread.php?304860-%DA%86%DA%A9-%DA%A9%D8%B1%D8%AF%D9%86-%DA%A9%D8%AF-%D9%85%D9%84%DB%8C&highlight=%D8%B5%D8%AD%D8%AA+%D9%83%D8%AF+%D9%85%D 9%84%D9%8A

VG1234
شنبه 27 خرداد 1391, 23:24 عصر
Private Sub Command1_Click()
Dim A As Integer
Dim num As Long
Dim N As Long
Dim C As Integer
Dim L As Integer
A = Right(Text1.Text, 1) 'Çæáíä ÚÏÏ ÇÒ ÓãÊ 
num = Left(Text1.Text, 9)
L = 2
For I = 1 To 9
If Len(Text1.Text) < 8 Then
A = MsgBox("National code numbers must be at least 8 digits", , "Error in entering the national code")
End If
If Text1.Text = "1111111111" Or Text1.Text = "2222222222" Or Text1.Text = "3333333333" Or Text1.Text = "4444444444" Or Text1.Text = "5555555555" Or Text1.Text = "6666666666" Or Text1.Text = "7777777777" Or Text1.Text = "8888888888" Or Text1.Text = "9999999999" Then
A = MsgBox("Error in entering the national code", , "worning")
End If
If Text1.Text = "1111111111" Or Text1.Text = "2222222222" Or Text1.Text = "3333333333" Or Text1.Text = "4444444444" Or Text1.Text = "5555555555" Or Text1.Text = "6666666666" Or Text1.Text = "7777777777" Or Text1.Text = "8888888888" Or Text1.Text = "9999999999" Then Exit For

If Len(Text1.Text) < 8 Then Exit For
N = num Mod 10
num = num \ 10
Z = N * L
Sum = Sum + Z
L = L + 1
Next
C = Sum Mod 11
If C < 2 And A = C Or C >= 2 And A = 11 - C Then Label1.Caption = "National code is correct" Else Label1.Caption = "National code is wrong"

End Sub