Search code examples
yiiyii2active-form

Validation IRAN Code Meli in Ajax ActiveForm Yii2


how to Validation IRAN Code Meli in Ajax ActiveForm Yii2

Correct:

2595722751

not Correct:

2595722752

Solution

  • Step1: in view

    <?php $form = ActiveForm::begin(['enableAjaxValidation' => true]); ?>
    

    Step2: function in model

    public function checkCodeMeli()
        {
            $code_melli = $this->code_meli;
    
            if (!preg_match('/^[0-9]{10}$/', $code_melli)) {
                $this->addError('code_meli', 'کد ملی باید 10 رقم باشد');
            }
    
            for ($i = 0; $i < 10; $i++) {
                if (preg_match('/^' . $i . '{10}$/', $code_melli)) {
                    $this->addError('code_meli', 'کد ملی صحیح وارد نشده است');
                }
            }
    
            for ($i = 0, $sum = 0; $i < 9; $i++) {
                $sum += ((10 - $i) * intval(substr($code_melli, $i, 1)));
            }
    
            $ret = $sum % 11;
            $parity = intval(substr($code_melli, 9, 1));
            if (($ret < 2 && $ret == $parity) || ($ret >= 2 && $ret == 11 - $parity)) {
                return true;
            }
            else {
                $this->addError('code_meli', 'کد ملی صحیح وارد نشده است');
            }
        }
    

    Step3: rule in Model

    ['code_meli', 'checkCodeMeli'],
    

    Step4: in controller

    $model = new Model();
    
    if(Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
       Yii::$app->response->format = Response::FORMAT_JSON;
       return ActiveForm::validate($model);
    }