Browse Source

Remove code in favor or existing IBAN check.

pull/92/head
James Cole 4 years ago
parent
commit
02ec4043fc
No known key found for this signature in database GPG Key ID: B49A324B7EAD6D80
  1. 91
      app/Rules/Iban.php
  2. 4
      app/Services/CSV/Converter/Iban.php

91
app/Rules/Iban.php

@ -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.';
}

4
app/Services/CSV/Converter/Iban.php

@ -42,7 +42,7 @@ class Iban implements ConverterInterface
*/
public function convert($value)
{
if ($this->isValidIban($value)) {
if (self::isValidIban($value)) {
// strip spaces from IBAN and make upper case.
$result = str_replace("\x20", '', strtoupper(app('steam')->cleanStringAndNewlines($value)));
app('log')->debug(sprintf('Converted "%s" to "%s"', $value, $result));
@ -59,7 +59,7 @@ class Iban implements ConverterInterface
*
* @return bool
*/
private function isValidIban(string $value): bool
public static function isValidIban(string $value): bool
{
app('log')->debug(sprintf('isValidIBAN("%s")', $value));
$value = strtoupper(trim(app('steam')->cleanStringAndNewlines($value)));

Loading…
Cancel
Save