|  |  | @ -23,6 +23,7 @@ declare(strict_types=1); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | namespace App\Rules; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | use App\Services\CSV\Converter\Iban as IbanConverter; | 
			
		
	
		
			
				
					|  |  |  | use Illuminate\Contracts\Validation\Rule; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | /** | 
			
		
	
	
		
			
				
					|  |  | @ -33,93 +34,13 @@ class Iban implements Rule | 
			
		
	
		
			
				
					|  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |      * Determine if the given value is a valid IBAN. | 
			
		
	
		
			
				
					|  |  |  |      * | 
			
		
	
		
			
				
					|  |  |  |      * @param  string  $attribute | 
			
		
	
		
			
				
					|  |  |  |      * @param  mixed  $value | 
			
		
	
		
			
				
					|  |  |  |      * @param string $attribute | 
			
		
	
		
			
				
					|  |  |  |      * @param mixed  $value | 
			
		
	
		
			
				
					|  |  |  |      * @return bool | 
			
		
	
		
			
				
					|  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |     public function passes($attribute, $value) | 
			
		
	
		
			
				
					|  |  |  |     public function passes($attribute, $value): bool | 
			
		
	
		
			
				
					|  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |         if (null === $value || !is_string($value) || strlen($value) < 6) { | 
			
		
	
		
			
				
					|  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |         // strip spaces
 | 
			
		
	
		
			
				
					|  |  |  |         $search  = [ | 
			
		
	
		
			
				
					|  |  |  |             "\x20", // normal space
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0001}", // start of heading
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0002}", // start of text
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0003}", // end of text
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0004}", // end of transmission
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0005}", // enquiry
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0006}", // ACK
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0007}", // BEL
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0008}", // backspace
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{000E}", // shift out
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{000F}", // shift in
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0010}", // data link escape
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0011}", // DC1
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0012}", // DC2
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0013}", // DC3
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0014}", // DC4
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0015}", // NAK
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0016}", // SYN
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0017}", // ETB
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0018}", // CAN
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{0019}", // EM
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{001A}", // SUB
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{001B}", // escape
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{001C}", // file separator
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{001D}", // group separator
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{001E}", // record separator
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{001F}", // unit separator
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{007F}", // DEL
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{00A0}", // non-breaking space
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{1680}", // ogham space mark
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{180E}", // mongolian vowel separator
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{2000}", // en quad
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{2001}", // em quad
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{2002}", // en space
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{2003}", // em space
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{2004}", // three-per-em space
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{2005}", // four-per-em space
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{2006}", // six-per-em space
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{2007}", // figure space
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{2008}", // punctuation space
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{2009}", // thin space
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{200A}", // hair space
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{200B}", // zero width space
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{202F}", // narrow no-break space
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{3000}", // ideographic space
 | 
			
		
	
		
			
				
					|  |  |  |             "\u{FEFF}", // zero width no -break space
 | 
			
		
	
		
			
				
					|  |  |  |             '-', | 
			
		
	
		
			
				
					|  |  |  |             '?', | 
			
		
	
		
			
				
					|  |  |  |         ]; | 
			
		
	
		
			
				
					|  |  |  |         $replace = ''; | 
			
		
	
		
			
				
					|  |  |  |         $value   = str_replace($search, $replace, $value); | 
			
		
	
		
			
				
					|  |  |  |         $value   = strtoupper($value); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         $search  = [' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; | 
			
		
	
		
			
				
					|  |  |  |         $replace = ['', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', | 
			
		
	
		
			
				
					|  |  |  |                     '32', '33', '34', '35',]; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         // take
 | 
			
		
	
		
			
				
					|  |  |  |         $first = substr($value, 0, 4); | 
			
		
	
		
			
				
					|  |  |  |         $last  = substr($value, 4); | 
			
		
	
		
			
				
					|  |  |  |         $iban  = $last . $first; | 
			
		
	
		
			
				
					|  |  |  |         $iban  = trim(str_replace($search, $replace, $iban)); | 
			
		
	
		
			
				
					|  |  |  |         if (0 === strlen($iban)) { | 
			
		
	
		
			
				
					|  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |         try { | 
			
		
	
		
			
				
					|  |  |  |             $checksum = bcmod($iban, '97'); | 
			
		
	
		
			
				
					|  |  |  |         } catch (ValueError $e) { | 
			
		
	
		
			
				
					|  |  |  |             $message = sprintf('Could not validate IBAN check value "%s" (IBAN "%s")', $iban, $value); | 
			
		
	
		
			
				
					|  |  |  |             Log::error($message); | 
			
		
	
		
			
				
					|  |  |  |             Log::error($e->getTraceAsString()); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         return 1 === (int)$checksum; | 
			
		
	
		
			
				
					|  |  |  |         return IbanConverter::isValidIban((string) $value); | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     /** | 
			
		
	
	
		
			
				
					|  |  | @ -127,7 +48,7 @@ class Iban implements Rule | 
			
		
	
		
			
				
					|  |  |  |      * | 
			
		
	
		
			
				
					|  |  |  |      * @return string | 
			
		
	
		
			
				
					|  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |     public function message() | 
			
		
	
		
			
				
					|  |  |  |     public function message(): string | 
			
		
	
		
			
				
					|  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |         return 'The :attribute is not a valid IBAN.'; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
	
		
			
				
					|  |  | 
 |