การตรวจสอบหมายเลขประจำตัวประชาชนนั้นเราจะทำ 2 อย่างด้วยกันคือ
- รูปแบบของหมายเลขประจำตัวประชาชนคือ 1-1111-11111-11-1
- ความถูกต้องของหมายเลขประจำตัวประชาชน
การสร้าง MaskedInput
MaskedInput เป็น Package ที่มีอยู่ใน Yii Framework 2 อยู่แล้ว ซึ่ง MaskedInput เป็นรูปแบบของการกำหนดการกรอกข้อมูลให้อยู่ในรูปแบบที่ต้องการ โดยสามารถ use มาใช้ได้ดังนี้
<?php
use yii\widgets\MaskedInput;
?>
?=$form->field($person, 'id_card')->widget(MaskedInput::className(),[
'mask'=>'9-9999-99999-99-9'
])?>
จะได้ดังนี้
การสร้าง Form แบบ AJAX Validation
สำหรับฟอร์มกำหนดให้เป็น AJAX Validation ดังนี้
<?php
use yii\widgets\ActiveForm;
?>
<?php
$form = ActiveForm::begin([
'enableAjaxValidation' => true, //เปิดการ validate ด้วย AJAX
'enableClientValidation' => false, // validate ฝั่ง client เมื่อ submit หรือ เปลี่ยนค่า
'validateOnChange' => true,// validate เมื่อมีการเปลี่ยนค่า
'validateOnSubmit' => true,// validate เมื่อ submit ข้อมูล
'validateOnBlur' => false,// validate เมื่อเปลี่ยนตำแหน่ง cursor ไป input อื่น
'options' => [
'enctype' => 'multipart/form-data'
]
])?>
สร้างการตรวจสอบด้วย AJAX ใน Controller
ใน Controller ให้เพิ่มการตรวจสอบการ Validate ด้วย AJAX
use Yii;
use yii\web\Response;
use yii\widgets\ActiveForm;
//อย่าลืม use ก่อนนะครับ
public function actionCreate()
{
$person = new Person();
$request = Yii::$app->getRequest();
if ($request->isPost && $request->post('ajax') !== null) {
$person->load(Yii::$app->request->post());
Yii::$app->response->format = Response::FORMAT_JSON;
$result = ActiveForm::validate($person);
return $result;
}
if($person->load(Yii::$app->request->post())
{
//ประมวลผลข้อมูลที่นี่ เช่น $person->save();
}
return $this->render('create', [
'person' => $person,
]);
}
สร้าง Method ในการตรวจสอบความถูกต้อง ใน Model
ใน Model ให้สร้างการตรวจสอบ โดยใน rules() ให้ส่งไปประมวลผลใน method
public function rules()
{
return [
//......
[['id_card'], 'validateIdCard'],
//......
];
}
public function validateIdCard()
{
$id = str_split(str_replace('-','', $this->id_card)); //ตัดรูปแบบและเอา ตัวอักษร ไปแยกเป็น array $id
$sum = 0;
$total = 0;
$digi = 13;
for($i=0; $i<12; $i++){
$sum = $sum + (intval($id[$i]) * $digi);
$digi--;
}
$total = (11 - ($sum % 11)) % 10;
if($total != $id[12]){ //ตัวที่ 13 มีค่าไม่เท่ากับผลรวมจากการคำนวณ ให้ add error
$this->addError('id_card', 'หมายเลขบัตรประชาชนไม่ถูกต้อง');
}
}
ตัวอย่างการใช้งาน
เมื่อกรอกหมายเลขประจำตัวประชาชนไม่ถูกต้อง
เมื่อกรอกหมายเลขบัตรประจำตัวประชาชนถูกต้อง
เสริมเพิ่มเติม
สำหรับหลักในการคำนวณหานั้นเป็นการคำนวณหาเลขหลักที่ 13 โดยนำ 12 หลักแรกมาคำนวณ อ้างอิงจาก
https://th.wikipedia.org/wiki/%E0%B9%80%E0%B8%A5%E0%B8%82%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B8%88%E0%B8%B3%E0%B8%95%E0%B8%B1%E0%B8%A7%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B8%8A%E0%B8%B2%E0%B8%8A%E0%B8%99%E0%B9%84%E0%B8%97%E0%B8%A2
ความคิดเห็น