برنامه نویس

به وبلاگ خودتان خوش آمدید.

برنامه نویس

به وبلاگ خودتان خوش آمدید.

سورس صحت سنجی کد ملی

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

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
شما هم میتونید از همین روش بفهمید که کد ملی درست وارد شده یا نه
امید وارم خوب تونسته باشم توضیح بدم 

 

 

این کد از داخل یک سایت برداشتم یک مقداری روش تغییر دادم امیدوارم به دردتون بخوره . من مطمئن نبودم که ایا تکراری بودن یک عدد از لحاظ کد ملی صحیح هست یا نه برای همین توی این کد این مورد تشخصی نمیده . همچنین حتما باید حداقل تعداد کاراکتر وارد شده 8 باشه  . البته من فقط روی کد دلفی امتحان کردم  .


این کد از داخل یک سایت برداشتم یک مقداری روش تغییر دادم امیدوارم به دردتون بخوره . من مطمئن نبودم که ایا تکراری بودن یک عدد از لحاظ کد ملی صحیح هست یا نه برای همین توی این کد این مورد تشخصی نمیده . همچنین حتما باید حداقل تعداد کاراکتر وارد شده 8 باشه  . البته من فقط روی کد دلفی امتحان کردم  .


و حالا کد با دلفی:

 

Function tForm2.IDCheck(NationalID: String): Boolean;

Var

  Sum: LongInt;

  I, Md, J: Integer;

  Rs: Boolean;

Begin

 

  if Length(NationalID)=9 then

     NationalID:='0'+NationalID;

  if Length(NationalID)=8 then

     NationalID:='00'+NationalID;

  Rs := False;

  Sum := 0;

  For I := 1 To 9 Do

  Begin

    Md := Strtoint(NationalID[I]);

    Sum := Sum + (Md * (11 - I));

  End;

  J := Sum Mod 11;

  If J < 2 Then

  BEGIN

    If Strtoint(NationalID[10]) = J Then

      Rs := True

    Else

      Rs := False;

  END

  Else

  Begin

    If Strtoint(NationalID[10]) = (11 - J) Then

      Rs := True

    Else

      Rs := False;

  End;

  Result := Rs;

End;


 

کد با c#

 

public bool NationalCodeCheck(string nationalCode)

{

    nationalCode = nationalCode.SubString(0, 10);

    for(int i = 0; i < (10 - nationalCode.Length); i++)

    {

        nationalCode = "0" + nationalCode;

    }

    int sum = 0;

    for(int i = 1; i <= 10; i++)

    {

        int digit;

        int.TryParse(nationalCode.SubString(i, 1), out digit);

        sum += digit * (i + 1);

    }

    if(sum > 2)

    {

        sum = 11 % sum;

    }

    return (sum.ToString() == nationalCode.SubString(0, 1));

}

 


کد با php


 

function NationalCodeCheck($nationalCode)

{

    $nationalCode = substr($nationalCode, 0, 10);

    for($i = 0; $i < (10 - strlen($nationalCode)); $i++)

    {

        $nationalCode = '0'.$nationalCode;

    }

    $sum = 0;

    for($i = 1; $i <= 10; $i++)

    {

        $sum += substr($nationalCode, i, 1) * ($i + 1);

    }

    if($sum > 2)

    {

        $sum = 11 % $sum;

    }

    return ($sum == substr($nationalCode, 0, 1));

}

 


کد با vb.net

 

Public Function CheckCode(ByVal Code As String) As Boolean

     Dim c As Double, n As Double, r As Double

       If Len(Code) < 10 Then Code= (10 - Len(Code) + "0") & Code

          c =Val(Mid$(Code, 10, 1))

          Dim j As Integer = 10

           For i As Integer = 1 To 9

               n= n + Val(Mid$(Code, i, 1)) * j

               j= j - 1

           Next

           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 Return (True)

   End Function

 

نظرات 1 + ارسال نظر
خرید اینترنتی پنج‌شنبه 17 مرداد‌ماه سال 1392 ساعت 12:40 ب.ظ http://javanbazar.com

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

خرید اینترنتی

لینک کنید.

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

هم اکنون آمار روزانه سایت من بین 2000 تا 3000 هست.

http://javanbazar.com

منتظر نظر زیباتون هستم. یادت نره حتما بیا...

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد