Intervention\Validation\Validator::isIsin PHP 메소드

isIsin() 공개 정적인 메소드

Checks if given value is International Securities Identification Number (ISIN)
public static isIsin ( mixed $value ) : boolean
$value mixed
리턴 boolean
    public static function isIsin($value)
    {
        $chars = [10 => 'A', 11 => 'B', 12 => 'C', 13 => 'D', 14 => 'E', 15 => 'F', 16 => 'G', 17 => 'H', 18 => 'I', 19 => 'J', 20 => 'K', 21 => 'L', 22 => 'M', 23 => 'N', 24 => 'O', 25 => 'P', 26 => 'Q', 27 => 'R', 28 => 'S', 29 => 'T', 30 => 'U', 31 => 'V', 32 => 'W', 33 => 'X', 34 => 'Y', 35 => 'Z'];
        $checkdigit = substr($value, -1);
        $value = substr($value, 0, -1);
        $value = str_replace($chars, array_keys($chars), $value);
        $g1 = [];
        $g2 = [];
        foreach (str_split($value) as $key => $num) {
            if ($key % 2 == 0) {
                $g1[] = intval($num);
            } else {
                $g2[] = intval($num);
            }
        }
        foreach ($g1 as $key => $num) {
            $g1[$key] = $num * 2;
        }
        $checksum = array_sum(str_split(implode('', $g1) . implode('', $g2)));
        $checksum = 10 - $checksum % 10;
        $checksum = $checksum % 10;
        return $checksum == $checkdigit;
    }

Usage Example

예제 #1
0
 public function testValidateIsin()
 {
     $isin = 'US0378331005';
     $no_isin = 'ZA9382189201';
     $this->assertTrue(Validator::isIsin($isin));
     $this->assertFalse(Validator::isIsin($no_isin));
     $isin = 'DE0005810055';
     $no_isin = 'DE0005810058';
     $this->assertTrue(Validator::isIsin($isin));
     $this->assertFalse(Validator::isIsin($no_isin));
 }