File: /home/armgroup/libs/app/Rules/NationalCode.php
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class NationalCode implements Rule
{
public function passes($attribute, $value)
{
$value = to_latin_numbers($value);
$cDigitLast = substr($value, strlen($value) - 1);
$fMeli = strval(intval($value));
if ((str_split($fMeli))[0] == '0' && ! (strlen($fMeli) >= 8 && strlen($fMeli) < 10)) {
return false;
}
$nineLeftDigits = substr($value, 0, strlen($value) - 1);
$positionNumber = 10;
$result = 0;
foreach (str_split($nineLeftDigits) as $chr) {
$digit = intval($chr);
$result += $digit * $positionNumber;
$positionNumber--;
}
$remain = $result % 11;
$controllerNumber = $remain;
if ($remain >= 2) {
$controllerNumber = 11 - $remain;
}
return $cDigitLast == $controllerNumber;
}
public function message()
{
return 'کد ملی اشتباه است.';
}
}