ตรวจสอบเลขบัตรประชาชน

ตัวอย่าง 1-2345-67890-12-1

  1. นำไปคูณเลขประจำตำแหน่ง : (1*13)+(2*12)+(3*11)+(4*10)+(5*9)+(6*8)+(7*7)+(8*6)+(9*5)+(0*4)+(1*3)+(2*2) = 352
  2. หารเอาเศษด้วย : 11 352%11= 0
  3. นำ 11 ตั้งแล้วลบเศษที่ได้จากการหารในข้อ 2 : 11 – 0 = 11 (เอาเลขหลักหน่วย) ดังนั้น Check Digit คือ 1
  4. จะได้ : 1-2345-67890-12-1
private static bool validateIDCard(string idcardno)
{
    if (string.IsNullOrEmpty(idcardno))
    {
        log.Info(string.Format("idcardno IsNullOrEmpty '{0}'", idcardno));
        return false;
    }

    if (idcardno.Length != 13)
    {
        log.Info(string.Format("idcardno Length != 13 '{0}'", idcardno));
        return false;
    }

    bool isDigit = Regex.IsMatch(idcardno, @"^[0-9]*$");
    if (!isDigit)
    {
        log.Info(string.Format("idcardno is not only digit '{0}'", idcardno));
        return false;
    }


    int sum = 0;
    for (int i = 0; i < 12; i++)
    {
        sum += Convert.ToInt32(idcardno.Substring(i, 1)) * (13 - i);
    }

    int checksum = (11 - (sum % 11)) % 10;
    if (checksum != Convert.ToInt32(idcardno.Substring(12)))
    {
        log.Info(string.Format("idcardno checksum error '{0}', sum = '{1}', checksum = '{2}'", idcardno, sum, checksum));
        return false;
    }

    return true;
}