+5 امتیاز

سلام

یک ورودی درام که از کاربر کد ملی میگره و اگر عددی که وارد میکنه کمتر 10 رقم باشه اخطار میده و اگر ده رقم بده خوب اخطار میره و دکمه ذخیره روشن میشه

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

کد خودم:

 bool isValid = txtCodemeli.Text.Length < 9;
            if (isValid)
            {
                ErrorText.Text = "کد ملی نباید کمتر از 10 رقم باشد ";
                ErrorText.Visible = isValid;
                btnSave.Visible = !isValid;
            }
            else
            {

                ErrorText.Text = "";
                ErrorText.Visible = !isValid;
                btnSave.Visible = !isValid;

 

بسته شده

1 پاسخ

+6 امتیاز
 
بهترین پاسخ

سلام.

الگوریتم تشخیص صحت کد ملی رو یکی از دوستان در این آدرس قرار دادن 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 تکست باکس استفاده کنید و یک لیبل در کنار تکست باکس قرار بدید تا وقتی که از تکست باکس خارج شد صحت بررسی بشه رنگ لیبل به  رنگ قرمز و متن لیبل به * تغییر کنه یا رنگ پس زمینه تکست باکس رو تغییر بدید تا کاربر سریع تر متوجه بشه که کد ملی اشتباهه.

و اینکه من این الگوریتم رو تضمین نمیکنم که کاملا درسته اگر سایتی در اینترنت باشه که صحت کد ملی رو تایید کنه میتونه کمک زیادی به شما کنه اما حتما این الگوریتم کارایی داره (امتحانش کردم).

اگر همون ده رقم رو کنترل کنید احتمال خطا کمتر میشه.

موفق باشید.

سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,924 کاربر

دسته بندی ها

...