Cake\Localized\Validation\RuValidation::snils PHP Метод

snils() публичный статический Метод

Check SNILS (СНИЛС)
public static snils ( string $check ) : boolean
$check string The value to check.
Результат boolean Success.
    public static function snils($check)
    {
        $pattern = '/\\d{3}-\\d{3}-\\d{3} \\d{2}/';
        if (!preg_match($pattern, $check)) {
            return false;
        }
        list($id, $checksum) = explode(' ', $check, 2);
        $id = str_replace('-', '', $id);
        // getting digits & positions from id string
        $digits = array_reverse(str_split($id));
        $sum = 0;
        foreach ($digits as $position => $value) {
            $sum += ($position + 1) * $value;
        }
        $calculatedChecksum = $sum % 101;
        $calculatedChecksum = str_pad($calculatedChecksum, 2, '0', STR_PAD_LEFT);
        $calculatedChecksum = substr($calculatedChecksum, -2);
        return $calculatedChecksum === $checksum;
    }

Usage Example

Пример #1
0
 /**
  * test snils method of RuValidation
  *
  * @return void
  *
  * @covers RuValidation::personId
  * @covers RuValidation::snils
  */
 public function testSnils()
 {
     $this->assertTrue(RuValidation::snils('112-233-445 95'));
     $this->assertTrue(RuValidation::snils('032-032-952 00'));
     $this->assertFalse(RuValidation::snils('03203295200'));
     // invalid checksum
     $this->assertFalse(RuValidation::snils('112-233-445 96'));
 }