2012-03-16 109 views
6

Tengo un archivo csv que contiene los números completos de las tarjetas de crédito. No necesitamos el número completo, por lo que estoy escribiendo un script rápido para analizar a través de la csv y reemplazar el número cc con una representación enmascarada. (todos * excepto los últimos cuatro). Soy bastante nuevo en Python y lo pirateé, y funciona, pero para aprender quiero saber si se puede hacer más fácilmente.¿Hay una mejor manera de enmascarar un número de tarjeta de crédito en python?

Supongamos que "str" ​​será un número de tarjeta de crédito completo. Pero por el bien de mi ejemplo, estoy usando la cadena "CREDITCARDNUMBER".

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

La salida es exactamente lo que quiero

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

Pero estoy seguro de que es una solución más elegante. :) ¡Gracias!

+0

examinado este le estoy adivinando un corto es el código de 1 ~ 2 líneas – pyCthon

+2

¿por qué no imprimir los últimos 4 números ? son necesarios los asteriscos? – serk

+0

Es posible que desee aceptar una de estas respuestas –

Respuesta

6

Tal vez un poco más elegante:

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

Tenga en cuenta que he evitado usando el nombre str debido a que ya es el nombre de la incorporada en el tipo de cadena. Por lo general, no es una buena idea usar nombres que sombreen los nombres incorporados.

0

Se podría hacer un poco más corta de este modo:

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

más ordenado sigue:

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

Gracias, agradezco la ayuda! –

2

Con Format String y Slicings:

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

¡dulce !, lo modifiqué un poco para tratar con la longitud dinámica '('{: *>' + str (len (card) - 4) + '}'). Format (card [-4:])' –

1

Para aquellos que quieren mantener Issuer Identification Number (IIN) (anteriormente llamado el "Número de Identificación del Banco" (BIN)), que es por lo general los primeros 6 dígitos, que debe hacer el trabajo:

print card[:6] + 'X' * 6 + card[-4:] 
'455694XXXXXX6539' 
Cuestiones relacionadas