Валидация при регистрации.

Валидация при регистрации.

от Boris Sedyshev -
Количество ответов: 4
Необходимо добавить дополнительное "Текстовое поле" в форму регистрации при самостоятельной регистрации, с этим проблем нет, сделал средствами moodle, там будущие студенты будут вводить свой СНИЛС, проблема в том что необходимо вводить именно в формате XXX-XXX-XXX XX и что бы так же валидация по контрольному числу была, вот по этой ссылке есть варианты решения, но я не знаю куда это вставить надо, прошу помогите кто разбирается: http://www.kholenkov.ru/data-validation/snils/

Версия Moodle 4.3
СУБД MySQL 8.0

В ответ на Boris Sedyshev

Re: Валидация при регистрации.

от Vadim Tabunshchik -
Изображение пользователя Developers
В ответ на Vadim Tabunshchik

Re: Валидация при регистрации.

от Boris Sedyshev -
Большое спасибо, одну часть проблемы решает плагин, но возможно ли что-то сделать, чтобы валидация так же проходила по контрольной сумме, как в примерах по ссылке?
В ответ на Boris Sedyshev

Re: Валидация при регистрации.

от Boris Sedyshev -
<?php

class DataValidation {

/**
* @param string $snils
* @param mixed $error_message
* @param mixed $error_code
* @return boolean
*/
public static function validateSnils($snils, &$error_message = null, &$error_code = null) {
$result = false;
$snils = (string) $snils;
if (!$snils) {
$error_code = 1;
$error_message = 'СНИЛС пуст';
} elseif (preg_match('/[^0-9]/', $snils)) {
$error_code = 2;
$error_message = 'СНИЛС может состоять только из цифр';
} elseif (strlen($snils) !== 11) {
$error_code = 3;
$error_message = 'СНИЛС может состоять только из 11 цифр';
} else {
$sum = 0;
for ($i = 0; $i < 9; $i++) {
$sum += (int) $snils{$i} * (9 - $i);
}
$check_digit = 0;
if ($sum < 100) {
$check_digit = $sum;
} elseif ($sum > 101) {
$check_digit = $sum % 101;
if ($check_digit === 100) {
$check_digit = 0;
}
}
if ($check_digit === (int) substr($snils, -2)) {
$result = true;
} else {
$error_code = 4;
$error_message = 'Неправильное контрольное число';
}
}
return $result;
}

}