PDA

View Full Version : گفتگو: چک کردن صحت کد ملی



atryad
یک شنبه 29 شهریور 1388, 22:56 عصر
سلام
یه dll براتون میزارم که میتونید با اون چک کنید که کد ملی صحیح است یا نه
تشکر یادتون نره




- (http://pmcharge.ir/)

debugger
دوشنبه 30 شهریور 1388, 12:49 عصر
بر چه اساسی چک می کنی کد ملی صحیح است یا خیر ؟

Sajjad.Aghapour
دوشنبه 30 شهریور 1388, 13:09 عصر
من چند وقت پیش الگوریتمش رو یه جایی دیده بودم.ولی گوگل تا دلت بخواد بهت لینک میده....

http://forum.p30world.com/showthread.php?t=295203

atryad
دوشنبه 30 شهریور 1388, 17:46 عصر
بر چه اساسی چک می کنی کد ملی صحیح است یا خیر ؟
سلام
این هم کلاس چک کردن صحت کد ملی

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Configuration;
using System.Web;


public class Code_meli
{
public bool chek(string meli)
{
try
{
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a, b;
int sum, mm;
char[] code = new char[12];
if (meli == "1111111111" || meli == "2222222222"||
meli == "3333333333" || meli == "4444444444"||
meli == "5555555555" ||meli == "6666666666" ||
meli == "7777777777" || meli == "8888888888"||
meli == "9999999999" || meli == "0000000000")
return false;
code = meli.ToCharArray();
///////////////////////////////
a1 = Convert.ToInt32(code[0].ToString()) * 10;//سه رقم اول
a2 = Convert.ToInt32(code[1].ToString()) * 9;//
a3 = Convert.ToInt32(code[2].ToString()) * 8;//
//-----------------------
a4 = Convert.ToInt32(code[3].ToString()) * 7;//
a5 = Convert.ToInt32(code[4].ToString()) * 6;//
a6 = Convert.ToInt32(code[5].ToString()) * 5;//شش رقم میانی
a7 = Convert.ToInt32(code[6].ToString()) * 4;//
a8 = Convert.ToInt32(code[7].ToString()) * 3;//
a9 = Convert.ToInt32(code[8].ToString()) * 2;//
//------------------
a10 = Convert.ToInt32(code[9].ToString());//رقم اخر

sum = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9;
mm = (sum % 11);
if (mm < 2)
if (a10 == mm)
return true;
if (mm >= 2)
if ((11 - mm) == a10)
return true;
return false;
}
catch
{
return false;
}



}

}

Parham.D
سه شنبه 31 شهریور 1388, 07:38 صبح
به من تازه کار بگید چک کردن صحت کد ملی یعنی چی؟! یعنی قالب کد ملی؟ پس چرا از Regular Expression استفاده نکردید؟!

atryad
سه شنبه 31 شهریور 1388, 10:09 صبح
به من تازه کار بگید چک کردن صحت کد ملی یعنی چی؟! یعنی قالب کد ملی؟ پس چرا از Regular Expression استفاده نکردید؟!
سلام
کد ملی تشکیل شده از 10 رقم که با الگوریتم خاصی کنار هم قرار گرفته اند و هر 10 رقمی یک کد ملی نمی شود مثلا 2392090645 یک کد ملی است اما 2392090644 کد ملی نیست

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

http://up.iranblog.com/2/1253705648.jpg

http://www.aliarash.com/article/codemeli/codemeli.htm

ali_autumnal
سه شنبه 31 شهریور 1388, 20:53 عصر
سلام

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

http://www.irp2d.com/codemeli.zip

satar_niakan
پنج شنبه 02 مهر 1388, 22:02 عصر
سلام
اين dll رو چطور بايد استفاده كرد توضيح بديد لطفاً

atryad
پنج شنبه 02 مهر 1388, 23:04 عصر
سلام
اين dll رو چطور بايد استفاده كرد توضيح بديد لطفاً
با سلام
توی مثال تایپیک 1 طریقه استفاده هست
ابتدا dll رو به Referense پروژه اضاف میکنید بعدا هرکجا که میخواین استفاده کنید
به صورت زیر عمل می کنید

Code_meli cc = new Code_meli();
if (cc.chek(textBox1.Text) == true)
MessageBox.Show("کد ملی صحیح می باشد", "تایید", MessageBoxButtons.OK, MessageBoxIcon.Information);
else
MessageBox.Show("کد ملی صحیح نمی باشد", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Warning);

که textbox1 در این مثال دارای مقدار کد ملی می باشد

atryad
پنج شنبه 02 مهر 1388, 23:09 عصر
میتونید به جای dll از کلاس توی تایپیک 4 استفاده کنید
و طریقه استفاده هم شبیه dll است وی ا فقط تابع موجود در کلاس رو به صورت مجزا در هر جا که میخواهین کپی کنید و استفاده کنید

public bool chek(string meli)
{
try
{
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a, b;
int sum, mm;
char[] code = new char[12];
if (meli == "1111111111" || meli == "2222222222"||
meli == "3333333333" || meli == "4444444444"||
meli == "5555555555" ||meli == "6666666666" ||
meli == "7777777777" || meli == "8888888888"||
meli == "9999999999" || meli == "0000000000")
return false;
code = meli.ToCharArray();
///////////////////////////////
a1 = Convert.ToInt32(code[0].ToString()) * 10;//سه رقم اول
a2 = Convert.ToInt32(code[1].ToString()) * 9;//
a3 = Convert.ToInt32(code[2].ToString()) * 8;//
//-----------------------
a4 = Convert.ToInt32(code[3].ToString()) * 7;//
a5 = Convert.ToInt32(code[4].ToString()) * 6;//
a6 = Convert.ToInt32(code[5].ToString()) * 5;//شش رقم میانی
a7 = Convert.ToInt32(code[6].ToString()) * 4;//
a8 = Convert.ToInt32(code[7].ToString()) * 3;//
a9 = Convert.ToInt32(code[8].ToString()) * 2;//
//------------------
a10 = Convert.ToInt32(code[9].ToString());//رقم اخر

sum = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9;
mm = (sum % 11);
if (mm < 2)
if (a10 == mm)
return true;
if (mm >= 2)
if ((11 - mm) == a10)
return true;
return false;
}
catch
{
return false;
}



}که فراخونی اون هم به شکل زیر می باشد




if (chek(textBox1.Text) == true)
MessageBox.Show("کد ملی صحیح می باشد", "تایید", MessageBoxButtons.OK, MessageBoxIcon.Information);
else
MessageBox.Show("کد ملی صحیح نمی باشد", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Warning);

ebraham
شنبه 29 مرداد 1390, 00:49 صبح
سلام اين كد خوبه ولي ايراد داره من امتحانش كردم .اگه اعداد تكراري باشند بازم مي گه درسته !

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

atryad
یک شنبه 26 آذر 1391, 12:37 عصر
تکرار در کد ملی مجاز است
این میتونه یک کد ملی باشه
2092090003
2000000010

atryad
یک شنبه 26 آذر 1391, 12:39 عصر
کد ملی شماره ای است 10 رقمی که از سمت چپ سه رقم کد شهرستان ، شش رقم بعدی کد منحصر به فرد برای فرد دارنده و رقم آخر آن هم یک رقم کنترل است که از روی 9 رقم سمت چپ بدست می آید. برای بررسی کنترل کد کافی است مجدد از روی 9 رقم سمت چپ رقم کنترل را محاسبه کنیم
در این الگوریتم سه رقم اول


a1 = Convert.ToInt32(code[0].ToString()) * 10;//سه رقم اول a2 = Convert.ToInt32(code[1].ToString()) * 9;//
a3 = Convert.ToInt32(code[2].ToString()) * 8;//

morteza5358
یک شنبه 26 آذر 1391, 21:05 عصر
روش اعتبار سنجی کد ملی :
۱-همه کدهای ملی ۱۰ رقمی هستند.
۲-کدهای ملی که همه ارقام آنها مثل هم باشند معتبر نیستند.
روش کار: دهمین رقم شماره ملی را ( از سمت چپ ) به عنوان A در نظر می گیریم.
یک مقدار B در نظر می گیریم و آن را برابر با =
(اولین رقم * ۱۰) + ( دومین رقم * ۹ ) + ( سومین رقم * ۸ ) + ( چهارمین رقم * ۷ ) + ( پنجمین رقم * ۶) + ( ششمین رقم * ۵ ) + ( هفتمین رقم * ۴ ) + ( هشتمین رقم * ۳ ) + ( نهمین رقم * ۲ )قرار می دهیم.
مقدار C را برابر با = B – (B/11)*11 قرار می دهیم.
اگر مقدار C برابر با صفر باشد و مقدار A برابر C باشد کد ملی صحیح است.
اگر مقدار C برابر با ۱ باشد و مقدار A برابر با ۱ باشد کد ملی صحیح است.
اگر مقدار C بزرگتر از ۱ باشد و مقدار A برابر با ۱۱ – C باشد کد ملی صحیح است.

دانلود سورس برنامه تشخیص صحت کد ملی (http://persianit.net/%D8%B3%D9%88%D8%B1%D8%B3-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%B5%D8%AD%D8%AA-%DA%A9%D8%AF-%D9%85%D9%84%DB%8C.html)