2012-03-16 9 views
6

Quindi ho un file csv che contiene numeri di carte di credito completi. Non abbiamo bisogno del numero completo, quindi scrivo uno script veloce per analizzare tramite csv e sostituire il numero cc con una rappresentazione mascherata. (tutti * eccetto gli ultimi quattro). Sono abbastanza nuovo per Python e ho hackerato questo, e funziona, ma per imparare voglio sapere se potrebbe essere fatto più facile.C'è un modo migliore per mascherare un numero di carta di credito in python?

Si supponga che "str" ​​sia un numero di carta di credito completo. Ma per il mio esempio sto solo usando la stringa "CREDITCARDNUMBER".

str = "CREDITCARDNUMBER"; 
strlength = len(str) 
masked = strlength - 4 
slimstr = str[masked:] 
print "*" * masked + slimstr 

L'uscita è esattamente quello che voglio

************MBER 

Ma sono sicuro che ci sia una soluzione più elegante. :) Grazie!

+0

, cercando in questo vi sto indovinando un breve è il codice di 1 ~ 2 linee – pyCthon

+2

perché non basta stampare gli ultimi 4 numeri ? gli asterischi sono necessari? – serk

+0

Puoi accettare una di queste risposte –

risposta

6

forse un po 'più elegante:

card = "CREDITCARDNUMBER" 
print "*" * (len(card) - 4) + card[-4:] 

Si noti che ho evitato utilizzando il nome str perché questo è già il nome del tipo built-in stringa. Di solito non è una buona idea usare nomi che ombreggiano i nomi built-in.

0

si potrebbe fare un po 'come più corto così:

str = "CREDITCARDNUMBER"; 
print "*" * (len(str) - 4) + str[-4:]; 
13

Neater ancora:

>>> s = "CREDITCARDNUMBER" 
>>> s[-4:].rjust(len(s), "*") 
'************MBER' 
+0

Grazie, apprezzo l'aiuto! –

2

Con Format String e Slicings:

'{:*>16}'.format(card[-4:]) 
+0

sweet !, l'ho modificato un po 'per gestire la lunghezza dinamica '(' {: *> '+ str (len (card) - 4) +'} '). Format (card [-4:])' –

1

Per coloro che vogliono mantenere Issuer Identification Number (IIN) (precedentemente chiamato "Bank Identification Number" (BIN)), che di solito è le prime 6 cifre, che dovrebbe fare il lavoro:

print card[:6] + 'X' * 6 + card[-4:] 
'455694XXXXXX6539' 
Problemi correlati