# Native Code > برنامه نویسی در 6 VB > مقاله: فرمول تشخيص صحت كد ملي

## vbhamed

سلام

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

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

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

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

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

*روش اعتبار سنجی کد ملی :*
دهمین رقم شماره ملی را ( از سمت چپ ) به عنوان 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

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

----------


## vbhamed

> سلام حامد جان 
> ایا این فرمول یک فرمول تعریف شده توسط ثبت احوال هست یا اینکه یک فرمول کلی برای شماره های 10 رقمی هست چون من هم یکسری بارکد 10 رقمی دارم که میخواهم اعتبار اونهارو ازمایش کنم که فرمولشون رو ندارم


سلام

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

----------


## Hamed Hosseini

خيلي عالي بود. برنامه ي كامپال شدش رو هم داريد؟

----------


## vbhamed

سلام

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

----------


## soheilbehro

می شه برنامه شو بگذاری من سر در نمی آورم لطفا

----------


## vbhamed

> می شه برنامه شو بگذاری من سر در نمی آورم لطفا


سلام

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

----------


## iranian-pc

این هم لینک برنامه تشخیص صحت کد ملی و شماره شناسنامه های 10 رقمی میباشد

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




> https://barnamenevis.org/showth...85%D9%84%DB%8C

----------


## soheilbehro

این هم برنامه کمپایل شده همراه با سورس

----------


## emdadgar2

اینم کد جاوا اسکريپت
 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

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


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

----------


## programer20

چه جوري ميشه كد ملي اشخاص حقوقي رو چك كرد؟
آخه من يه برنامه نوشتم كه بر اساس شناسه اشخاص حقوقي (كد ملي) اطلاعات رو ذخيره مي كنه. فقط مي دونم بايد 11 رقمي باشه

----------


## NasimBamdad

معادل C#‎ رو نداری ؟

----------


## MohammadGh2011

> معادل C#‎‎ رو نداری ؟


 سلام عليکم
در تالار سي شارپ سوالتان را بپرسيد(البته قبلش جستجو کنيد فکر کنم کد سي شارپ هم باشه)
به تاريخ پست ها هم نگاهي بندازيد.آخرين پست اين تاپيک دو سال قبل ايجاد شده!



موفق باشيد

----------


## MohammadGh2011

لينک زير رو ببينيد:
https://barnamenevis.org/showthread.p...85%D9%84%D9%8A

----------


## VG1234

*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
*

----------

