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

ตัวอย่างรหัสประชาชน

1-2015-41462-23-4 Check Digit ของรหัสประชาชนนี้คือเลข 4 (เลขตัวสุดท้าย)

ขั้นตอนที่ 1 เอาเลข 12 หลักมา เขียนแยกหลักกันก่อน (หลักที่ 13 ไม่ต้องเอามา) จะได้ 120154146223

ขั้นตอนที่ 2 เอาเลข 12 หลักนั้นมา คูณเข้ากับเลขประจำหลักของมัน
รหัสบัตร 1 2 0 1 5 4 1 4 6 2 2 3 ตัวคูณ 13 12 11 10 9 8 7 6 5 4 3 2
จะได้ 1*13+2*12+0*11+1*10+5*9+4*8+1*7+4*6+6*5+2*4+2*3+3*2
ผลคูณ 13+24+0+10+45+32+7+24+30+8+6+6

ขั้นตอนที่ 3 เอาผลคูณทั้ง 12 ตัวมา บวกกันทั้งหมด จะได้ 13+24+0+10+45+32+7+24+30+8+6+6=205

ขั้นตอนที่ 4 เอาเลขที่ได้จากขั้นตอนที่ 3 มา mod 11 (หารเอาเศษ) จะได้ 205 mod 11 = 7

ขั้นตอนที่ 5 เอา 11 ตั้ง ลบออกด้วย เลขที่ได้จากขั้นตอนที่ 4 จะได้ 11-7 = 4 (จะได้ 4 เป็นเลขในหลัก Check Digit)

ถ้าเกิด ลบแล้วได้ออกมาเป็นเลข 2 หลัก ให้เอาเลขในหลักหน่วยมาเป็น Check Digit (เช่น 11 ให้เอา 1 มา, 10 ให้เอา 0 มา เป็นต้น)

[code]function checkDigilCardID {
  const pattern = /[0-9]{13}/;
  if (!id.match(pattern)) { return false; }

  let sum = 0;
  for (let i = 0; i < 12; i += 1) {
    sum += parseInt(id.substr(i, 1), 10) * ((13) - i);
  }

  if ((11 - (sum % 11)) % 10 !== parseInt(id.substr(12, 1), 10)) { return false; }

  return true;
}[/code]

สุ่มเลขบัตรประชาชน 13 หลัก

[code lang="javascript"]function getNum() {
  var r = rand(1, 8),
    t = rand(0, 9),
    e = rand(0, 9),
    n = rand(0, 9),
    a = rand(0, 9),
    c = rand(0, 9),
    i = rand(0, 9),
    u = rand(0, 9),
    l = rand(0, 9),
    s = rand(0, 9),
    o = rand(0, 9),
    d = rand(0, 9),
    g = getLastNum(r, t, e, n, a, c, i, u, l, s, o, d);
  return '' + r + t + e + n + a + c + i + u + l + s + o + d + g;
}

function getLastNum() {
  var r = arguments,
    t = 13 * r[0] + 12 * r[1] + 11 * r[2] + 10 * r[3] + 9 * r[4] + 8 * r[5] + 7 * r[6] + 6 * r[7] + 5 * r[8] + 4 * r[9] + 3 * r[10] + 2 * r[11],
    e = 11 - t % 11;
  return e > 9 && (e %= 10), e;
}[/code]