Thread Kreditkarten Maskierung via RegEx (12 answers)
Opened by marcus74 at 2015-02-17 16:19

Gast wer
 2015-02-18 11:44
#179723 #179723
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
my %found;
# c sagt: mache nach dem letzten match weiter (continue after last match)
# Das problem ist nur das jede andere regex den counter für diese zurücksetzt
# also bedarf es eine prüfung die ohne regex auskommt, 
# falls ein wert keine keditkartennummer ist, 
# damit die schleife nicht hängen bleibt
while ($row =~ /(3[47]\d{13})/gc) {
  # Werte zwischenspeichern, Da jede regexp $1 usw. überschreibt.
  my $number=$1;
  # also wert speichern und überspringen wenn schon gefunden
  next if($found{$number}++);
  # weiter wenn es nicht passt
  # hier kann es passieren das die regex-engine zurück gesetzt wird
  # zb durch eine andere regex
  next unless(is_valid($number));

  print "$number\n";
  # nun den gefundenen wert mit dem maskierten ersetzen
  my $masked=$number;
  # achtung! das setzt die regex-engine zurück!
  $masked=~s/^.+(\d{4})$/XXXXXXXXXXX$1/;
  $row=~s/$number/$masked/g;
  # hiernach beginnt die regex im while wieder am anfang der zeile, 
  # was aber unproblematisch ist, 
  # da alle entweder die werte maskiert wurden, 
  # oder in "%found" stehen.
}

Last edited: 2015-02-18 11:48:45 +0100 (CET)

View full thread Kreditkarten Maskierung via RegEx