سلام.
الگوریتم تشخیص صحت کد ملی رو یکی از دوستان در این آدرس قرار دادن http://www.aliarash.com/article/codemeli/codemeli.htm و واقعا دستشون درد نکنه.
شما رویداد KeyPress ارو به این صورت تغییر بدین تا از وارد شدن کاراکتری به غیر از عدد خودداری بشه و همچنین اگر طول رشته درون تکست باکس بیشتر از 10 بود اجازه وارد شدن هیچ کاراکتری داده نشه به خاطر اینکه تعداد عدد کد ملی بیشتر از 10 نیست.
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back))
e.Handled = true;
else if (textBox1.Text.Length == 10 && e.KeyChar != (char)Keys.Back && textBox1.SelectedText.Length == 0)
e.Handled = true;
}
و یک باتن بر روی فرم قرار داده و بر روی آن بار کلیک کنید و در رویداد Click رو به اینصورت تعریف کنید.
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text.Length < 8)
{
MessageBox.Show("کد ملی صحیح نمیباشد");
return;
}
///
int sum = 0;
string codeMeli = textBox1.Text;
if (codeMeli.Length >= 8 && codeMeli.Length < 10)
{
codeMeli = "00".Substring(0, 10 - codeMeli.Length) + codeMeli;
}
for (byte i = 0; i < 9; ++i)
{
sum += (Convert.ToInt32(codeMeli[i]) - 48) * (10 - i);
}
sum = sum % 11;
if (sum < 2 && int.Parse(codeMeli[9].ToString()) != sum)
MessageBox.Show("کد ملی صحیح نمیباشد");
else if (sum >= 2 && int.Parse(codeMeli[9].ToString()) != 11 - sum)
MessageBox.Show("کد ملی صحیح نمیباشد");
else
MessageBox.Show("کد ملی صحیح میباشد");
}
و همچنین شما میتونید به جای استفاده از رویدا کلیک باتن از رویداد leave تکست باکس استفاده کنید و یک لیبل در کنار تکست باکس قرار بدید تا وقتی که از تکست باکس خارج شد صحت بررسی بشه رنگ لیبل به رنگ قرمز و متن لیبل به * تغییر کنه یا رنگ پس زمینه تکست باکس رو تغییر بدید تا کاربر سریع تر متوجه بشه که کد ملی اشتباهه.
و اینکه من این الگوریتم رو تضمین نمیکنم که کاملا درسته اگر سایتی در اینترنت باشه که صحت کد ملی رو تایید کنه میتونه کمک زیادی به شما کنه اما حتما این الگوریتم کارایی داره (امتحانش کردم).
اگر همون ده رقم رو کنترل کنید احتمال خطا کمتر میشه.
موفق باشید.