Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 30, 2016 19:10:04

matue
Зарегистрирован: 2016-08-12
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Маскирование номера карты

Подскажите пожалуйста как замаскировать номер банковской карты (16 знаков)?

На входе лог-txt файл, в котором местами имеются полные номера карт, которые нужно привезти отвида : 1234123412341234 к виду: 1234 **** **** 1234

чтение - запись в файл реализованы.

Офлайн

#2 Авг. 30, 2016 20:40:07

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Маскирование номера карты

ну я думаю проблемно будет потом определить какая цифра спрятана под * проще зашифровать или буквами или цифрами. да еще не просто тупо сменить допустим 2 на 8 а хитрей допустим первую 2 меняем на 8 или букву а например вторую уже на 4 или букву в и так по всей строке

Офлайн

#3 Авг. 30, 2016 20:56:46

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Маскирование номера карты

 >>> def f(s):
...     return s[:4] + ' **** **** ' + s[-4:]
... 
>>> f('1234123412341234')
'1234 **** **** 1234'



————————————————
-*- Simple is better than complex -*-

Офлайн

#4 Авг. 30, 2016 21:29:14

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Маскирование номера карты

terabayt
ну а когда вы считаете эту строку из файла ‘1234 **** **** 1234’ как восстановить исходные цифры? хотя может это автору не нужно, не уточнил.

Офлайн

#5 Авг. 31, 2016 07:52:10

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Маскирование номера карты

Скорее всего автор сохраняет в другой файл! ТОгда при востановлении из изначального можно выкусить по поиску фулл номер



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Авг. 31, 2016 08:33:57

matue
Зарегистрирован: 2016-08-12
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Маскирование номера карты

не так. Запись в тот же файл.

 import os, re
files = os.listdir(".") # листинг текущей директории
LogFilesNames = filter(lambda x: x.endswith('.log'), files) # отобрать все лог файлы
print'Files:',len(LogFilesNames)
lc=0
for n in LogFilesNames:    # цикл по именам файлов
    f = open(n,'r+').readlines() # читаем строки каждого файла
    print'File: ',n,'\nLines: ',len(f)
    for i in range(len(f)): # цикл по номерам строк
       
тут нужно найти паны и замаскировать их
    with open(n,'w') as F:
        print type(F)
        print type(f)
        F.writelines(f) # применение изменений в файле
        print'Edited lines: ',lc # вывод числа отредактированных строк
        print'Applying in file: ',F.name # вывод имени обработанного файла

Отредактировано matue (Авг. 31, 2016 08:36:03)

Офлайн

#7 Авг. 31, 2016 09:10:54

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Маскирование номера карты

Вы наверное задачу опишите поточнее
а то какаято магия получается



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#8 Авг. 31, 2016 15:38:41

matue
Зарегистрирован: 2016-08-12
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Маскирование номера карты

есть решение!

 import os, re
files = os.listdir(".") # листинг текущей директории
LogFilesNames = filter(lambda x: x.endswith('.log'), files) # отобрать все лог файлы
print'Files:',len(LogFilesNames)
Pattern=r'\D(\d{4})\d{8}(\d{4})\D' #паттерн 
Mask=r' \1 **** **** \2 ' #маска
for n in LogFilesNames:    # цикл по именам файлов
    f = open(n,'r').readlines() # читаем строки файла
    print'File: ',n,'\nLines: ',len(f)
    f_text=''.join(f)  # инициируем переменную f_text и помещаем в нее текстовое содержимое файла
    f_new_text = re.sub(Pattern, Mask, f_text) # в f_new_text пишем обработанный с помощью регулярного выражения текст
    f = open(n, 'w') #открытие файла для записи
    print'Applying in file: ',n # вывод имени обработанного файла
    f.write(f_new_text) #запись в файл преобразованного текста
    f.close() #закрытие файла

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version