Automatischer Zahlungsparser
This commit is contained in:
@@ -57,6 +57,41 @@ final class Iban
|
||||
return trim(chunk_split(self::normalize($iban), 4, ' '));
|
||||
}
|
||||
|
||||
/**
|
||||
* Nur Land, Prüfziffer und die letzten vier Stellen -- der Rest wird zu Punkten.
|
||||
*
|
||||
* Für Seiten, die über einen Token aus einer Mail erreichbar sind: Die eigene Bankverbindung
|
||||
* erkennt man daran wieder, wer den Token aus einem fremden Postfach fischt, liest sie aber
|
||||
* nicht mit.
|
||||
*/
|
||||
public static function mask(string $iban): string
|
||||
{
|
||||
$iban = self::normalize($iban);
|
||||
|
||||
// Zu kurz zum Maskieren wäre auch zu kurz zum Erkennen -- dann lieber alles verdecken.
|
||||
$masked = strlen($iban) <= 8
|
||||
? str_repeat('•', max(strlen($iban), 1))
|
||||
: substr($iban, 0, 4) . str_repeat('•', strlen($iban) - 8) . substr($iban, -4);
|
||||
|
||||
return self::group($masked);
|
||||
}
|
||||
|
||||
/**
|
||||
* In Vierergruppen, zeichen- statt byteweise.
|
||||
*
|
||||
* `chunk_split()` zählt Bytes und würde das drei Byte lange „•" mitten durchschneiden -- heraus
|
||||
* käme Zeichensalat.
|
||||
*
|
||||
* @param string $value
|
||||
*/
|
||||
private static function group(string $value): string
|
||||
{
|
||||
return implode(' ', array_map(
|
||||
static fn (array $chunk): string => implode('', $chunk),
|
||||
array_chunk(mb_str_split($value), 4),
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Mod 97-10: die ersten vier Zeichen ans Ende, Buchstaben durch ihre Position + 9 ersetzen
|
||||
* (A = 10 … Z = 35), das Ergebnis modulo 97. Eine gültige IBAN ergibt 1.
|
||||
|
||||
Reference in New Issue
Block a user