PDA

View Full Version : آموزش: کلاس اعتبار سنجی کد ملی



rrasheli
دوشنبه 13 شهریور 1391, 13:09 عصر
سلام
توی یکی از پروژه های خودم نیاز دیدم تا کدملی فرد رو اعتبارسنجی کنم و واسه همین توی نت جستجو کردم و فرمولش رو بدست آوردم و اونو تبدیل به یه کلاس کردم.
حالا ممکنه بقیه دوستان هم به این کلاس نیاز داشته باشن. واسه همین به صورت dll میذارم تا استفاده کنید.
دانلود کنید (http://s1.picofile.com/file/7484448602/NationalCodeValidator.zip.html)
برای استفاده کافیه فایل رو Add refrence کنید و به صورت زیر کد بنویسید:

if (Mahan.NationalCodeValidator.IsValid("1360645136"))
{
Response.Write("Is valid.");
}
else
{
Response.Write("Is invalid.");
}

Farshid007
دوشنبه 13 شهریور 1391, 14:48 عصر
مگه کد ملی چجوری باید باشه!

ایا فقط تعداد ارقام مهمه؟
والله کد ملی خودم اینه:
031-139396-9

mehrdad85
دوشنبه 13 شهریور 1391, 15:39 عصر
سلام
دوست عزیز بابت زحمتی که کشیدی ممنون
ولی به نظرت فکر نمیکنی که این مطلبت هیچ آموزشی نداشت؟
اگه قرار باشه تمام کاربرایی که یه مطلب را برای دانلود میزارن مثل شما عنوان آموزش را براش بذارن میدونی چه اتفاقی میافته؟

به هر حال این کارت اصولی نیست اما بابت تاپیکت ممنون

AmirGhasemi
دوشنبه 13 شهریور 1391, 15:47 عصر
داداش جان سورس validation را بگذار!!‌ بلانسبت شما بچه سوسول ها از dll بدون اينكه ندونن توش چيه استفاده مي كنن!!
لطفا در صورت امكان سورس كامل را بگذار!

Yanehsar
دوشنبه 13 شهریور 1391, 18:46 عصر
مگه کد ملی چجوری باید باشه!

ایا فقط تعداد ارقام مهمه؟
والله کد ملی خودم اینه:
031-139396-9

سلام
کد ملی شماره ای است 10 رقمی که از سمت چپ سه رقم کد شهرستان ، شش رقم بعدی کد منحصر به فرد برای فرد دارنده و رقم آخر آن هم یک رقم کنترل است که از روی 9 رقم سمت چپ بدست می آید. برای بررسی کنترل کد کافی است مجدد از روی 9 رقم سمت چپ رقم کنترل را محاسبه کنیم
ساختار کد ملی
1- برای محاسبه رقم کنترل از روی سایر ارقام ، هر رقم را در موقعیت آن ضرب کرده و حاصل را با هم جمع می کنیم.
2- مجموع بدست آمده از مرحله یک را بر 11 تقسیم می کنیم
3- اگر باقیمانده کمتر از 2 باشد ، رقم کنترل باید برابر باقیمانده باشد در غیر اینصورت رقم کنترل باید برابر یازده منهای باقیمانده باشد
به عنوان مثال 4709450552
باید از سمت چپ یکی یکی اعداد را از 10 به پایین ضرب کنیم البته تا 9 تا عدد یعنی 470945055
40=10*4
63=9*7
0=8*0
63=7*9
24=6*4
25=5*5
0=4*0
15=3*5
10=2*5

خوب حالا باید تمام این حاصلضرب ها رو با هم جمع کنیم
که میشه 240
حالا باید این عدد رو تقسیم بر 11 کنیم البته ما با باقیمانده تقسیم کار داریم
اگر باقیمانده از 2 کوچکتر بود همون عدد میشه رقم آخر کد ملی
اما اگر از 2 بیشتر بود 11 رو منهای باقیمانده میکنیم
در این مثال باقیمانده عدد 9 میشه
2=9-11
پس کد اخر میشه عدد 2 حالا به کد ملی ما نگاه کنید 4709450552
شما هم میتونید از همین روش بفهمید که کد ملی درست وارد شده یا نه


031-139396-9
0*10=0
3*9=27
1*8=8
1*7=7
3*6=18
9*5=45
3*4=12
9*3=27
6*2=12
0+27+9+7+18+45+12+27+12=156
11-2=9

AmirGhasemi
دوشنبه 13 شهریور 1391, 18:59 عصر
يه سوال در مورد پست قبلي؟؟
منظور از سه رقم سمت چپ كه كد شهرستان است چيه؟؟؟! اين كد از كجا مياد؟؟ يعني پيش كد تلفن؟؟! يا نه در يك ديتابيسي سازمان ثبت احوال به هر شهري يك كد داده است!!!
من متولدين تهران را مي شناسم كه سه رقم سمت چپ كد ملي شون با هم تفاوت داره خب!!!!

abcd_a
دوشنبه 13 شهریور 1391, 19:46 عصر
سلام
توی یکی از پروژه های خودم نیاز دیدم تا کدملی فرد رو اعتبارسنجی کنم و واسه همین توی نت جستجو کردم و فرمولش رو بدست آوردم و اونو تبدیل به یه کلاس کردم.
حالا ممکنه بقیه دوستان هم به این کلاس نیاز داشته باشن. واسه همین به صورت dll میذارم تا استفاده کنید.
دانلود کنید (http://s1.picofile.com/file/7484448602/NationalCodeValidator.zip.html)
برای استفاده کافیه فایل رو Add refrence کنید و به صورت زیر کد بنویسید:

if (Mahan.NationalCodeValidator.IsValid("1360645136"))
{
Response.Write("Is valid.");
}
else
{
Response.Write("Is invalid.");
}


سلام
اگه امکانش هست سوس کد بزار

Mahmoud Zaad
دوشنبه 13 شهریور 1391, 20:05 عصر
يه سوال در مورد پست قبلي؟؟
منظور از سه رقم سمت چپ كه كد شهرستان است چيه؟؟؟! اين كد از كجا مياد؟؟ يعني پيش كد تلفن؟؟! يا نه در يك ديتابيسي سازمان ثبت احوال به هر شهري يك كد داده است!!!
من متولدين تهران را مي شناسم كه سه رقم سمت چپ كد ملي شون با هم تفاوت داره خب!!!!
سلام
به هر شهرستان یک کدی داده شده حالا لیستو ببینی تا حدودی منطقش دستت میاد. اینجا (http://codemelli.blogfa.com/post-2.aspx)به صورت استانی کد شهرستان ها جمع آوری شده، یکی دو مورد رو چک کردم درست بودن.

Yanehsar
دوشنبه 13 شهریور 1391, 20:07 عصر
يه سوال در مورد پست قبلي؟؟
منظور از سه رقم سمت چپ كه كد شهرستان است چيه؟؟؟! اين كد از كجا مياد؟؟ يعني پيش كد تلفن؟؟! يا نه در يك ديتابيسي سازمان ثبت احوال به هر شهري يك كد داده است!!!
من متولدين تهران را مي شناسم كه سه رقم سمت چپ كد ملي شون با هم تفاوت داره خب!!!!

slm
bebakhshid enslish minvisam farsi az to systemam pak shode.
in 3 ragham bara har shahrestan tarif shode hast.ke ehtemalan ham daste sabte ahval hastesh.
mesle pelak mashin ke 11,22,33,... bara tehrane :D
bara code meli ham bara khode man ke motevalede tehran hastam 008 hatesh.

uniqueboy_ara
دوشنبه 13 شهریور 1391, 21:32 عصر
اینم تابعی که بنده طبق فرمایشات دوستمون نوشتم: :)
bool CheckValidation(string MelliCode)
{
int sum = 0;
int number=0;
if (MelliCode.Length == 10 && int.TryParse(MelliCode, out number))
{
int counter = 10;
for (int i = 0; i <= 8; i++)
{
int digit = int.Parse(Convert.ToString(MelliCode[i]));
sum += digit * counter;
counter--;
}
sum %= 11;
if (sum < 2)
{
if (MelliCode[9] == '2')
return true;
else
return false;
}
else
{
string x = Convert.ToString(11 - sum);
string z = Convert.ToString(MelliCode[9]);
if (z == x)
return true;
else
return false;
}
}
else
{
return false;
}
}

Farshid007
دوشنبه 13 شهریور 1391, 22:20 عصر
http://csharpdotnet.blogsky.com/1390/06/25/post-263/
به این هم یه سر بزنید بد نیست!

mehrdad85
سه شنبه 14 شهریور 1391, 09:07 صبح
[QUOTE]

مجموع بدست آمده از مرحله یک را بر 11 تقسیم می کنیم
اگر باقیمانده کمتر از 2 باشد ، رقم کنترل باید برابر باقیمانده باشد در غیر اینصورت رقم کنترل باید برابر یازده منهای باقیمانده باشد
[QUOTE/]

سلام
دوست عزیز منظروت از یان که کمتر از 2 باشه آیا خود 2 هم قبوله؟
یعنی فقط باید 0و 1 را چک کنیم یا اینکه 2 نیز جز همین دسته محسوب میشه /
ممنون میشم پاسخ بدید


مرسی

FastCode
سه شنبه 14 شهریور 1391, 09:21 صبح
واقعاً طراح کد ملی چیزی از CRC و واژه ی Cyclic میفهمیده؟من شک دارم

mehrdad85
سه شنبه 14 شهریور 1391, 09:49 صبح
واقعاً طراح کد ملی چیزی از CRC و واژه ی Cyclic میفهمیده؟من شک دارم

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

اگه کار خیلی مهم باشه یعنی داخل پروژه ای که داریم کار میکنیم صحت کد ملی اهمیت زیادی داشته باشه میتونیم محل صدور کاربر را هم بگیریم و با اون جدولی که دوستمون زحمت کشیده بودن و لینک داده بودن چک کنیم شاید این مزخرف بودن ساختار کدملی را بتونیم یکم پوشش بدیم

دوستان کسی نظر دیگه ای داره؟
خوشحال میشم از تجربیات شما ها هم استفاده کنم

Yanehsar
سه شنبه 14 شهریور 1391, 11:03 صبح
سلام
دوست عزیز منظروت از یان که کمتر از 2 باشه آیا خود 2 هم قبوله؟
یعنی فقط باید 0و 1 را چک کنیم یا اینکه 2 نیز جز همین دسته محسوب میشه /
ممنون میشم پاسخ بدید
مرسی

سلام بله فقط 0و1 بود درسته تو مثال دومي كه با كد ملي دوستمون Farshid007 (http://barnamenevis.org/member.php?179717-Farshid007) زدم نگاه كنيد باقيمانده 2 شده و 11 رو از 2 كم كرديم و جواب شد 9 همون رقم آخر كد ملي دوستمون.


واقعاً طراح کد ملی چیزی از CRC و واژه ی Cyclic میفهمیده؟من شک دارم
نمي دونم چي بايد گفت.من شنيدم كه براي طراحي دلار آمريكا يك گروه شش سال وقت گذاشتند احتمالا اين بنده هاي خدا هم شش دقيقه وقت گذاشتند ديگه.:متفکر:

ahsaya
سه شنبه 04 مهر 1391, 23:37 عصر
كد هاي جدول شهرستانها رو ببينيد ؟

به نظر شما چه ارتباط منطقي بين نقاط مختلف وجود داره ؟

از نظر پراكندگي جغرافيايي هم كه نيگا مي كني خيلي در همه .

از اون جدوله كه بگذريم ، چندتايي كه من تست كردم درست دراومد.

ali***
یک شنبه 26 آذر 1391, 08:29 صبح
با سلام
دوستان کسی میتونه بگه چطوری از کد ملی می توان شهر محل تولد را تشخیص داد
البته الگوریتمش را می دونم فقط نمی دونم چطوری توی برنامه تعیین صحت کد ملی ازش استفاده کنم.
ممنون میشم پاسخ بدید.

Mahmoud Zaad
یک شنبه 26 آذر 1391, 09:22 صبح
با سلام
دوستان کسی میتونه بگه چطوری از کد ملی می توان شهر محل تولد را تشخیص داد
البته الگوریتمش را می دونم فقط نمی دونم چطوری توی برنامه تعیین صحت کد ملی ازش استفاده کنم.
ممنون میشم پاسخ بدید.
سلام
خب توی پست 8 یه لینک دادم، باید اون کدها رو توی فایل متنی، xml یا بانک اطلاعاتی داشته باشید بعد چک کنید ببینید کد ملی نوشته شده با کدوم یکی از اونها شروع میشه ...

behzadamin12
شنبه 24 اسفند 1392, 22:34 عصر
مگه کد ملی چجوری باید باشه!

ایا فقط تعداد ارقام مهمه؟
والله کد ملی خودم اینه:
031-139396-9


با سلام
دوستان عزیز
لازم دیدم که این کد رو به صورت خیلی ساده برای دوستان با سورس کامل اراپه بدم
این کدهارو تو #c نوشتم
یک فرم ایجاد کنید و یه textbox و button
بعد تو قسمت button کد زیرو وارد کنید.




private void button1_Click(object sender, EventArgs e)
{
char []a;
a=textBox1.Text.ToCharArray();
var meli_code=a.ToArray();
string meli_code1=meli_code.ToString();
int c,n,r;
if (meli_code.Length == 10)
{
if(meli_code1=="1111111111" || meli_code1=="2222222222" || meli_code1=="3333333333" || meli_code1=="4444444444" || meli_code1=="5555555555" || meli_code1=="6666666666" || meli_code1=="7777777777" || meli_code1=="8888888888" || meli_code1=="9999999999" )
{
MessageBox.Show("کد ملی صحیح نیست");
}
else
{
c = int.Parse(a[9].ToString());
n = int.Parse(a[0].ToString())*10 + int.Parse(a[1].ToString())*9 + int.Parse(a[2].ToString())*8 + int.Parse(a[3].ToString())*7 + int.Parse(a[4].ToString())*6 + int.Parse(a[5].ToString())*5 + int.Parse(a[6].ToString())*4 + int.Parse(a[7].ToString())*3 + int.Parse(a[8].ToString())*2;
r = n - (n/11)*11;
if ((r == 0 && r == c) || (r == 1 && c == 1) || (r > 1 && c == 11 - r))
{
MessageBox.Show("کد ملی صحیح می باشد");
}
else
{
MessageBox.Show("کد ملی وارد شده معتبر نمی باشد");
}
}
}
else
{
MessageBox.Show("error");
}
}



بهزاد میرزازاده

lovee20002002
شنبه 08 شهریور 1393, 17:13 عصر
public class NationalCodeValidator {
public int AddToList(string nationalCode, out int lastNumber)
{
string str = nationalCode;
List<int> list = new List<int>();
if (str.Length < 10)
{
lastNumber = 0;
return 0;
}
for (int i = 0; i < str.Length; i++)
{
list.Add(int.Parse(str.Substring(i, 1)));
}
lastNumber = this.GetFlag(list);
return this.Sum(list);
}


public bool Calculate(int sum, int lastNumber)
{
int num = sum % 11;
if (num > 2)
{
return (lastNumber == (11 - num));
}
return (lastNumber == num);
}


public int GetFlag(List<int> nationalCode)
{
return nationalCode[nationalCode.Count - 1];
}


public static bool IsValid(string nationalCode)
{
int num;
NationalCodeValidator validator = new NationalCodeValidator();
int sum = validator.AddToList(nationalCode, out num);
return ((sum != 0) && validator.Calculate(sum, num));
}


public int Sum(List<int> list)
{
int result = 0;
int i = 10;
list.RemoveAt(list.Count - 1);
list.ForEach(delegate (int x) {
result += x * i--;
});
return result;
}
}

asbous.saeid
دوشنبه 07 فروردین 1396, 04:30 صبح
private bool IsNationalCode(string NCode) {
const int n = 10;
if (NCode.Length != n)
throw (new Exception("کد ملی باید 10 رقم باشد!"));
else
{
int l = 0, k;
for (int i = 0; i < n - 1; i++)
{
try { k = Convert.ToInt16(NCode[i].ToString()); }
catch { throw (new Exception("کد ملی فقط از عدد تشکیل شده است!")); }
l += k * (n - i);
}
l %= 11;
return (l > 2) ? (11 - l) == Convert.ToInt16(NCode[n - 1].ToString()) : l == Convert.ToInt16(NCode[n - 1].ToString());
}
}