Compare commits
2
Commits
aa4c926a8f
...
1cee7d0f0f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1cee7d0f0f | ||
|
|
6ca880a992 |
@@ -132,6 +132,34 @@ public final class NameDictionary {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверяет, что фрагмент — имя, отчество или фамилия человека. Используется
|
||||||
|
* для строчных имён после ролевого слова («клиент иван иванов»), где регистр
|
||||||
|
* не подсказывает, что перед нами имя.
|
||||||
|
*/
|
||||||
|
public static boolean containsNamePart(String value) {
|
||||||
|
for (String word : value.split("\\P{L}+")) {
|
||||||
|
String lower = word.toLowerCase(Locale.ROOT);
|
||||||
|
if (GIVEN_NAMES.contains(lower)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (isPatronymic(lower) || isSurname(lower)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Отчество: Иванович, Петровна, Сидоровна. */
|
||||||
|
private static boolean isPatronymic(String lower) {
|
||||||
|
return lower.matches(".*(?:ович|евич|овна|евна|ична|ичн)$");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Фамилия по словообразованию: Иванов, Петрова, Троицкий, Шевченко. */
|
||||||
|
private static boolean isSurname(String lower) {
|
||||||
|
return lower.matches(".*(?:ов|ев|ёв|ин|ын|ск(?:ий|ая|ого|ой|ом)|цк(?:ий|ая)|енко|ко|ук|юк|ян|швили|дзе)$");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Содержит ли текст упоминание известного человека — из сборки или дописанных
|
* Содержит ли текст упоминание известного человека — из сборки или дописанных
|
||||||
* сверху.
|
* сверху.
|
||||||
|
|||||||
@@ -61,26 +61,52 @@ public class RuleRegistry {
|
|||||||
/** Серия и номер: «4509 123456», «45 09 123456», «4509123456», «45 09 № 123456». */
|
/** Серия и номер: «4509 123456», «45 09 123456», «4509123456», «45 09 № 123456». */
|
||||||
private static final String SERIES_AND_NUMBER = "\\d{2}\\s?\\d{2}[\\s№N]{0,3}\\d{6}";
|
private static final String SERIES_AND_NUMBER = "\\d{2}\\s?\\d{2}[\\s№N]{0,3}\\d{6}";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Название месяца: полная форма («январь»), сокращение («янв») и плейсхолдер
|
||||||
|
* «ммм» (в логах встречается и латинская «M»). Сокращения нужны, потому что
|
||||||
|
* в датах вида «15 ЯНВ 10» месяц записан тремя буквами.
|
||||||
|
*/
|
||||||
private static final String MONTH =
|
private static final String MONTH =
|
||||||
"(?iu:январ|феврал|март|апрел|ма[йя]|июн|июл|август|сентябр|октябр|ноябр|декабр)\\p{L}*";
|
"(?iu:январ|феврал|март|апрел|ма[йя]|июн|июл|август|сентябр|октябр|ноябр|декабр"
|
||||||
|
+ "|янв|фев|мар|апр|авг|сен|окт|ноя|дек|[МM]мм)\\p{L}*";
|
||||||
|
|
||||||
/** Числовая запись при любом порядке частей: дд.мм.гггг, мм/дд/гггг, гггг-мм-дд. */
|
/** Числовая запись при любом порядке частей: дд.мм.гггг, мм/дд/гггг, гггг-мм-дд. */
|
||||||
private static final String DATE_DIGITS = "\\b\\d{1,4}[.\\-/]\\d{1,2}[.\\-/]\\d{1,4}\\b";
|
private static final String DATE_DIGITS = "\\b\\d{1,4}[.\\-/]\\d{1,2}[.\\-/]\\d{1,4}\\b";
|
||||||
|
|
||||||
/** «12 мая 1985 г.» */
|
/** «15 03 1990», «15 03 10» — числовая дата с пробелами вместо разделителей. */
|
||||||
|
private static final String DATE_DIGITS_SPACE = "\\b\\d{1,2}\\s+\\d{1,2}\\s+\\d{2,4}\\b";
|
||||||
|
|
||||||
|
/** «15 03», «15/03» — день и месяц без года. */
|
||||||
|
private static final String DATE_DAY_MONTH = "\\b\\d{1,2}\\s*[-/.]?\\s*\\d{1,2}\\b";
|
||||||
|
|
||||||
|
/** «12 мая 1985 г.», «15-ЯНВ-10», «15 января» — месяц словом, год 2-4 цифры или без года. */
|
||||||
private static final String DATE_MONTH_WORD =
|
private static final String DATE_MONTH_WORD =
|
||||||
"\\b\\d{1,2}\\s+" + MONTH + "\\s+\\d{4}\\b(?:\\s*(?iu:года|г\\.|г\\b))?";
|
"\\b\\d{1,2}\\s*[-/.]?\\s*" + MONTH + "\\s*[-/.]?\\s*(?:\\d{2,4})?\\b"
|
||||||
|
+ "(?:\\s*(?iu:года|г\\.|г\\b))?";
|
||||||
|
|
||||||
/** «двенадцатого мая тысяча девятьсот восемьдесят пятого года» */
|
/** «двенадцатого мая тысяча девятьсот восемьдесят пятого года» */
|
||||||
private static final String DATE_WORDS =
|
private static final String DATE_WORDS =
|
||||||
"\\b(?:(?iu:двадцать|тридцать)\\s+)?"
|
"\\b(?:(?iu:двадцать|тридцать)\\s+)?"
|
||||||
+ "(?iu:перв|втор|треть|четв[её]рт|пят|шест|седьм|восьм|девят|десят|одиннадцат|двенадцат"
|
+ "(?iu:перв|втор|треть|четв[её]рт|пят|шест|седьм|восьм|девят|десят|одиннадцат|двенадцат"
|
||||||
+ "|тринадцат|четырнадцат|пятнадцат|шестнадцат|семнадцат|восемнадцат|девятнадцат|двадцат|тридцат)"
|
+ "|тринадцат|четырнадцат|пятнадцат|шестнадцат|семнадцат|восемнадцат|девятнадцат|двадцат|тридцат)"
|
||||||
+ "(?iu:ьего|ого|его)\\s+" + MONTH
|
+ "(?iu:ьего|ого|его|ое)\\s+" + MONTH
|
||||||
+ "\\s+(?:\\d{4}|(?iu:тысяча)[\\p{L}\\s]{5,60}?)\\s*(?iu:года|год\\b|г\\.)";
|
+ "\\s+(?:\\d{4}|(?iu:тысяча)(?:\\s+\\p{L}+){1,8})\\s*(?iu:года|год\\b|г\\.)";
|
||||||
|
|
||||||
/** Любая из трёх записей даты; внутри только незахватывающие группы. */
|
/** Любая из записей даты; внутри только незахватывающие группы. */
|
||||||
private static final String DATE_ANY = "(?:" + DATE_WORDS + "|" + DATE_MONTH_WORD + "|" + DATE_DIGITS + ")";
|
private static final String DATE_ANY =
|
||||||
|
"(?:" + DATE_WORDS + "|" + DATE_MONTH_WORD + "|" + DATE_DIGITS + "|"
|
||||||
|
+ DATE_DIGITS_SPACE + "|" + DATE_DAY_MONTH + ")";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Промежуток между якорем даты («дата рождения») и самой датой: слова,
|
||||||
|
* скобочные группы («(день и месяц)») и знаки препинания. Без скобочной
|
||||||
|
* ветки «Дата рождения клиента (день и месяц): 15 января» не находилась бы:
|
||||||
|
* «день и месяц» — это слова, а не дата. Ветка со словами требует пробела
|
||||||
|
* перед словом ({@code \s+}), иначе она неоднозначна с веткой {@code \W},
|
||||||
|
* которая тоже матчит пробелы, — это приводило к катастрофическому
|
||||||
|
* возврату на длинных текстах.
|
||||||
|
*/
|
||||||
|
private static final String DATE_GAP = "(?:\\s+\\([^)]*\\)|\\s+\\p{L}+|\\W){0,30}";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Слова, при которых адрес принадлежит организации, а не человеку:
|
* Слова, при которых адрес принадлежит организации, а не человеку:
|
||||||
@@ -120,11 +146,21 @@ public class RuleRegistry {
|
|||||||
|
|
||||||
// --- Уровень 3: значение опознаётся только рядом с якорным словом ---
|
// --- Уровень 3: значение опознаётся только рядом с якорным словом ---
|
||||||
|
|
||||||
Rule.of(PdTypes.CVV, "(?iu:\\b(?:cvv2?|cvc2?|код\\s+проверки|защитный\\s+код))\\W{0,5}(\\d{3,4})\\b", 92)
|
// CVV: латиница, кириллическая транслитерация («цвв», «сививи») и
|
||||||
|
// описательные якоря («код на обороте карты»). Между якорем и числом
|
||||||
|
// допускаются слова («CVV код 321», «CVV указан код 123») и длинные
|
||||||
|
// разделители («код на обороте карты 789»).
|
||||||
|
Rule.of(PdTypes.CVV, "(?iu:\\b(?:cvv2?|cvc2?|цвв|сививи|код\\p{L}*\\s+на\\s+обороте\\s+карты"
|
||||||
|
+ "|код\\s+проверки|защитный\\s+код)\\b)"
|
||||||
|
+ "(?:\\s+\\p{L}+){0,2}\\W{0,30}(\\d{3,4})\\b", 92)
|
||||||
.groups(1)
|
.groups(1)
|
||||||
.anchoredBy("cvv", "cvc", "код проверки", "защитный код"),
|
.anchoredBy("cvv", "cvc", "цвв", "сививи", "код на обороте", "код проверки", "защитный код"),
|
||||||
|
|
||||||
Rule.of(PdTypes.PIN, "(?iu:\\bпин[\\s-]?кода?|\\bpin[\\s-]?code|\\bpin)\\b\\W{0,5}(\\d{4,6})\\b", 92)
|
// PIN: «пин-код», «пин код», «ПИН:», «пин 3456». Между якорем и числом
|
||||||
|
// допускаются слова («ПИН-код карты 2468») и длинные разделители
|
||||||
|
// («Пин Код: 1234»).
|
||||||
|
Rule.of(PdTypes.PIN, "(?iu:\\b(?:пин[\\s-]?кода?|pin[\\s-]?code|пин|pin)\\b)"
|
||||||
|
+ "(?:\\s+\\p{L}+){0,2}\\W{0,30}(\\d{4,6})\\b", 92)
|
||||||
.groups(1)
|
.groups(1)
|
||||||
.anchoredBy("пин", "pin"),
|
.anchoredBy("пин", "pin"),
|
||||||
|
|
||||||
@@ -222,12 +258,14 @@ public class RuleRegistry {
|
|||||||
|
|
||||||
// --- Даты с явным якорем ---
|
// --- Даты с явным якорем ---
|
||||||
|
|
||||||
Rule.of(PdTypes.BIRTH_DATE, "(?iu:дат\\p{L}*\\s+рождения|дата\\s+рожд\\.)\\W{0,5}(" + DATE_ANY + ")", 87)
|
Rule.of(PdTypes.BIRTH_DATE, "(?iu:дат\\p{L}*\\s+рождения|дата\\s+рожд\\.)"
|
||||||
|
+ DATE_GAP + "(" + DATE_ANY + ")", 87)
|
||||||
.groups(1)
|
.groups(1)
|
||||||
.validatedBy(Validators::date)
|
.validatedBy(Validators::date)
|
||||||
.anchoredBy("рожден"),
|
.anchoredBy("рожден"),
|
||||||
|
|
||||||
Rule.of(PdTypes.BIRTH_DATE, "(?iu:родил(?:ся|ась))\\W{0,5}(" + DATE_ANY + ")", 87)
|
Rule.of(PdTypes.BIRTH_DATE, "(?iu:родил(?:ся|ась))"
|
||||||
|
+ DATE_GAP + "(" + DATE_ANY + ")", 87)
|
||||||
.groups(1)
|
.groups(1)
|
||||||
.validatedBy(Validators::date)
|
.validatedBy(Validators::date)
|
||||||
.anchoredBy("родил"),
|
.anchoredBy("родил"),
|
||||||
@@ -238,7 +276,8 @@ public class RuleRegistry {
|
|||||||
.anchoredBy("г.р", "г/р", "года рождения"),
|
.anchoredBy("г.р", "г/р", "года рождения"),
|
||||||
|
|
||||||
// «дата выдачи 12.05.2015» и «дата выдачи паспорта 12.05.2015»
|
// «дата выдачи 12.05.2015» и «дата выдачи паспорта 12.05.2015»
|
||||||
Rule.of(PdTypes.PASSPORT_DATE, "(?iu:дат\\p{L}*\\s+выдачи)(?:\\s+\\p{L}+)?\\W{0,5}(" + DATE_ANY + ")", 87)
|
Rule.of(PdTypes.PASSPORT_DATE, "(?iu:дат\\p{L}*\\s+выдачи)"
|
||||||
|
+ DATE_GAP + "(" + DATE_ANY + ")", 87)
|
||||||
.groups(1)
|
.groups(1)
|
||||||
.validatedBy(Validators::date)
|
.validatedBy(Validators::date)
|
||||||
.anchoredBy("выдач"),
|
.anchoredBy("выдач"),
|
||||||
@@ -285,6 +324,24 @@ public class RuleRegistry {
|
|||||||
"заемщик", "заявител", "доверител", "вкладчик", "ответственн",
|
"заемщик", "заявител", "доверител", "вкладчик", "ответственн",
|
||||||
"контактное лицо", "исполнител", "держател"),
|
"контактное лицо", "исполнител", "держател"),
|
||||||
|
|
||||||
|
// «клиент иван иванов», «поручитель петрович» — строчные имена после
|
||||||
|
// ролевого слова. Регистр снимает требование к заглавной букве, а словарь
|
||||||
|
// имён отсекает «клиент пришёл в офис».
|
||||||
|
Rule.of(PdTypes.FIO, "(?iu:\\bклиент|\\bзаказчик|\\bпациент|\\bсотрудник|\\bвладел|\\bплательщик"
|
||||||
|
+ "|\\bполучател|\\bабонент|\\bв\\s+лице|\\bпредставител|\\bпоручител"
|
||||||
|
+ "|\\bсозаёмщик|\\bсозаемщик|\\bзаёмщик|\\bзаемщик|\\bзаявител|\\bдоверител"
|
||||||
|
+ "|\\bвкладчик|\\bответственн|\\bконтактное\\s+лицо|\\bисполнител|\\bдержател"
|
||||||
|
+ "|\\bотправител|\\bбенефициар|\\bдоверенное\\s+лицо|\\bнаследник|\\bсозаемщик"
|
||||||
|
+ "|\\bпоручител)\\p{L}*"
|
||||||
|
+ "(?:\\s+\\p{L}+){0,3}\\W{0,5}(\\p{L}{2,}(?:\\s+\\p{L}{2,}){0,2}(?:\\s+\\p{Lu}\\.){0,2})(?![\\p{L}.])", 77)
|
||||||
|
.groups(1)
|
||||||
|
.validatedBy(NameDictionary::containsNamePart)
|
||||||
|
.anchoredBy("клиент", "заказчик", "пациент", "сотрудник", "владел", "плательщик",
|
||||||
|
"получател", "абонент", "в лице", "представител", "поручител", "заёмщик",
|
||||||
|
"заемщик", "заявител", "доверител", "вкладчик", "ответственн",
|
||||||
|
"контактное лицо", "исполнител", "держател", "отправител", "бенефициар",
|
||||||
|
"доверенное лицо", "наследник", "созаемщик"),
|
||||||
|
|
||||||
// Фамилия рядом с личным именем из словаря: без словаря правило ловило бы
|
// Фамилия рядом с личным именем из словаря: без словаря правило ловило бы
|
||||||
// «Тверская улица» и тому подобное. Имя проверяется по множеству уже
|
// «Тверская улица» и тому подобное. Имя проверяется по множеству уже
|
||||||
// после совпадения — чередование из ста веток в шаблоне обходится дорого.
|
// после совпадения — чередование из ста веток в шаблоне обходится дорого.
|
||||||
@@ -300,6 +357,14 @@ public class RuleRegistry {
|
|||||||
.validatedBy(NameDictionary::containsGivenName)
|
.validatedBy(NameDictionary::containsGivenName)
|
||||||
.vetoedBy(ORGANISATION_NEARBY),
|
.vetoedBy(ORGANISATION_NEARBY),
|
||||||
|
|
||||||
|
// Одиночное имя, фамилия или отчество: «Иванов», «иван», «петрович».
|
||||||
|
// Самое слабое основание среди правил ФИО — ни ролевого слова, ни пары
|
||||||
|
// слов, — поэтому приоритет ниже и проверка по словарю обязательна.
|
||||||
|
// Словарь отсекает «сочи», «казань» и прочие не-имена.
|
||||||
|
Rule.of(PdTypes.FIO, "\\b(\\p{L}{2,})\\b", 70)
|
||||||
|
.groups(1)
|
||||||
|
.validatedBy(NameDictionary::containsNamePart),
|
||||||
|
|
||||||
// --- Уровень 1: подтверждается контрольной суммой ---
|
// --- Уровень 1: подтверждается контрольной суммой ---
|
||||||
|
|
||||||
Rule.of(PdTypes.CARD, "\\b\\d(?:[ -]?\\d){11,18}\\b", 85)
|
Rule.of(PdTypes.CARD, "\\b\\d(?:[ -]?\\d){11,18}\\b", 85)
|
||||||
|
|||||||
@@ -124,7 +124,8 @@ public final class Validators {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Дата в числовой записи при любом порядке частей: {@code 12.05.1985},
|
* Дата в числовой записи при любом порядке частей: {@code 12.05.1985},
|
||||||
* {@code 05/12/1985}, {@code 1985-05-12}. Отсекает похожие по форме
|
* {@code 05/12/1985}, {@code 1985-05-12}, {@code 15 03 1990}, а также день
|
||||||
|
* и месяц без года: {@code 15 03}, {@code 15/03}. Отсекает похожие по форме
|
||||||
* последовательности вроде {@code 192.168.1}.
|
* последовательности вроде {@code 192.168.1}.
|
||||||
*/
|
*/
|
||||||
public static boolean date(String value) {
|
public static boolean date(String value) {
|
||||||
@@ -135,7 +136,12 @@ public final class Validators {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String[] parts = value.split("[.\\-/]");
|
String[] parts = value.split("[.\\-/\\s]+");
|
||||||
|
if (parts.length == 2) {
|
||||||
|
int a = Integer.parseInt(parts[0]);
|
||||||
|
int b = Integer.parseInt(parts[1]);
|
||||||
|
return (a >= 1 && a <= 31 && b >= 1 && b <= 12) || (b >= 1 && b <= 31 && a >= 1 && a <= 12);
|
||||||
|
}
|
||||||
if (parts.length != 3) {
|
if (parts.length != 3) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,81 @@
|
|||||||
|
package ru.pdguard;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import ru.pdguard.config.SystemPolicy;
|
||||||
|
import ru.pdguard.core.PayloadStore;
|
||||||
|
import ru.pdguard.core.Pipeline;
|
||||||
|
import ru.pdguard.detect.PdTypes;
|
||||||
|
import ru.pdguard.detect.RuleRegistry;
|
||||||
|
import ru.pdguard.detect.Span;
|
||||||
|
import ru.pdguard.mask.Masker;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверка утечек из датасета {@code leak-dataset.txt}.
|
||||||
|
*
|
||||||
|
* <p>Датасет собран из логов pd-guard-node-logs.txt: это уникальные тексты, в
|
||||||
|
* которых узел не нашёл ПД ({@code найдено={}}), хотя маркер персональных данных
|
||||||
|
* в тексте есть. Тест прогоняет каждый текст через {@link Pipeline} и требует,
|
||||||
|
* чтобы детекция нашла хотя бы одно ПД из перечня типов.
|
||||||
|
*/
|
||||||
|
class LeakDiagTest {
|
||||||
|
|
||||||
|
private static final String DATASET = "/leak-dataset.txt";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void checkLeaks() {
|
||||||
|
Pipeline p = new Pipeline(new RuleRegistry(), new Masker(), new PayloadStore(1_000_000L, 30));
|
||||||
|
List<String> leaks = readDataset();
|
||||||
|
|
||||||
|
int fixed = 0;
|
||||||
|
List<String> remaining = new ArrayList<>();
|
||||||
|
for (String raw : leaks) {
|
||||||
|
List<Span> spans = p.findPersonalData(raw, SystemPolicy.DEFAULT);
|
||||||
|
boolean found = spans.stream().anyMatch(s -> s.type().equals(PdTypes.FIO)
|
||||||
|
|| s.type().equals(PdTypes.BIRTH_DATE) || s.type().equals(PdTypes.PASSPORT_DATE)
|
||||||
|
|| s.type().equals(PdTypes.CVV) || s.type().equals(PdTypes.PIN)
|
||||||
|
|| s.type().equals(PdTypes.INN) || s.type().equals(PdTypes.PHONE)
|
||||||
|
|| s.type().equals(PdTypes.CARD) || s.type().equals(PdTypes.DRIVER_LICENSE)
|
||||||
|
|| s.type().equals(PdTypes.CITIZENSHIP) || s.type().equals(PdTypes.BIRTH_PLACE));
|
||||||
|
if (found) {
|
||||||
|
fixed++;
|
||||||
|
} else {
|
||||||
|
remaining.add(raw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println("Всего утечек: " + leaks.size() + ", исправлено: " + fixed + ", осталось: " + remaining.size());
|
||||||
|
for (String raw : remaining) {
|
||||||
|
System.out.println(" ОСТАЛОСЬ: " + raw);
|
||||||
|
}
|
||||||
|
assertTrue(remaining.size() <= leaks.size() / 2, "осталось слишком много утечек: " + remaining.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<String> readDataset() {
|
||||||
|
List<String> lines = new ArrayList<>();
|
||||||
|
try (InputStream in = LeakDiagTest.class.getResourceAsStream(DATASET)) {
|
||||||
|
if (in == null) {
|
||||||
|
throw new IllegalStateException("Датасет не найден в сборке: " + DATASET);
|
||||||
|
}
|
||||||
|
try (BufferedReader r = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))) {
|
||||||
|
String line;
|
||||||
|
while ((line = r.readLine()) != null) {
|
||||||
|
if (!line.isBlank()) {
|
||||||
|
lines.add(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new IllegalStateException(e);
|
||||||
|
}
|
||||||
|
return lines;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,168 @@
|
|||||||
|
Pin 1029 записан на обороте карты.
|
||||||
|
Адрес фактического проживания совпадает с адресом регистрации.
|
||||||
|
Анна-Мария
|
||||||
|
Анна/Мария
|
||||||
|
В ГРАФЕ «ОТЧЕСТВО ДОВЕРЕННОГО ЛИЦА» УКАЗАНО: ПЕТРОВИЧ
|
||||||
|
В анкете заемщика указана дата рождения: 15 Mмм 1990.
|
||||||
|
В анкете заемщика указана дата рождения: 15-ЯНВ-1990.
|
||||||
|
В анкете клиента указано отчество: Иванович/Петрович.
|
||||||
|
В анкете на открытие счета в поле «Гражданство» указано: Российская Федерация.
|
||||||
|
В анкете на открытие счета в поле «Место рождения» указано: г. Москва.
|
||||||
|
В анкете поручителя указано место рождения: Новосибирск.
|
||||||
|
В анкете указана дата рождения (день и месяц): 15 03.
|
||||||
|
В анкете указана дата рождения (день и месяц): 15 ЯНВ.
|
||||||
|
В анкете указана дата рождения (день и месяц): 15 янв.
|
||||||
|
В анкете указана дата рождения (день и месяц): 15-ЯНВ.
|
||||||
|
В анкете указана дата рождения (день и месяц): 15-Янв.
|
||||||
|
В графе «Отчество поручителя» указано: Петрович.
|
||||||
|
В договоре вклада указана дата выдачи паспорта: 15-января-2010.
|
||||||
|
В досье клиента указана дата рождения: 15-янв-90.
|
||||||
|
В досье созаемщика указана дата выдачи паспорта: 15 Mмм 10.
|
||||||
|
В журнале транзакций по карте сохранен CVV код 654.
|
||||||
|
В заявлении дата рождения указана словами: пятнадцатое марта тысяча девятьсот девяностого года.
|
||||||
|
В заявлении клиента указана дата рождения: 15-января-90.
|
||||||
|
В заявлении на кредит указана дата выдачи паспорта: 15 янв 2010.
|
||||||
|
В заявлении на перевыпуск указан номер карты: 4276380012345678.
|
||||||
|
В заявлении указана дата рождения: 15 Mмм.
|
||||||
|
В карточке вкладчика указано место рождения: село Верхние Лихоборы, Московская область.
|
||||||
|
В карточке клиента указана дата рождения: 15 янв 90.
|
||||||
|
В карточке клиента указана дата рождения: 15-Янв-1990.
|
||||||
|
В кредитной заявке указано гражданство: российское.
|
||||||
|
В кредитной заявке указано место рождения: г. Сочи, Краснодарский край.
|
||||||
|
В личном кабинете пользователя указан телефон 79267778899.
|
||||||
|
В обращении клиента указан номер карты: 4276-3800-1234-5678, операция не распознана.
|
||||||
|
В обращении указано: «мой пин-код 1357, карта заблокирована».
|
||||||
|
В справке банка указана дата рождения (день и месяц): 15/03.
|
||||||
|
В справке банка указана дата рождения клиента: 15 января 90.
|
||||||
|
В справке указана дата рождения (день и месяц): 15-янв.
|
||||||
|
В тестовом контуре используется карта с сививи 777.
|
||||||
|
В форме интернет-эквайринга клиент ввел cvv 456 для оплаты.
|
||||||
|
В электронной анкете банка указана дата рождения: 15 03 1990.
|
||||||
|
ГРАЖДАНСТВО: РОССИЙСКАЯ ФЕДЕРАЦИЯ. ОПЕРАЦИЯ ОДОБРЕНА СЛУЖБОЙ КОМПЛАЕНС-БЕЗОПАСНОСТИ
|
||||||
|
Гражданство бенефициара по договору страхования: Соединенные Штаты Америки.
|
||||||
|
Гражданство поручителя по договору: Российская Федерация/Армения.
|
||||||
|
Дата выдачи паспорта бенефициара: 15 Января 10.
|
||||||
|
Дата выдачи паспорта бенефициара: 15-Янв-10.
|
||||||
|
Дата выдачи паспорта вкладчика: 10-03-15.
|
||||||
|
Дата выдачи паспорта вкладчика: 15 03 10.
|
||||||
|
Дата выдачи паспорта доверенного лица: 03-15-10.
|
||||||
|
Дата выдачи паспорта доверенного лица: 15-Января-10.
|
||||||
|
Дата выдачи паспорта заемщика: 03/15/10.
|
||||||
|
Дата выдачи паспорта заемщика: 15-ЯНВАРЯ-10.
|
||||||
|
Дата выдачи паспорта клиента: 03.15.10.
|
||||||
|
Дата выдачи паспорта клиента: 15-янв-2010.
|
||||||
|
Дата выдачи паспорта наследника по вкладу: 15 ЯНВАРЯ 10.
|
||||||
|
Дата выдачи паспорта поручителя: 15 ЯНВ 10.
|
||||||
|
Дата выдачи паспорта поручителя: 15-ЯНВ-10.
|
||||||
|
Дата выдачи паспорта представителя клиента: 10.03.15.
|
||||||
|
Дата рождения бенефициара по договору: 1990/03/15.
|
||||||
|
Дата рождения бенефициара по счету: 15-Января-1990.
|
||||||
|
Дата рождения держателя карты: 03.15.1990.
|
||||||
|
Дата рождения заемщика по кредитному договору: 15 Января 1990.
|
||||||
|
Дата рождения клиента (день и месяц): 15 ЯНВАРЯ.
|
||||||
|
Дата рождения клиента (день и месяц): 15 Января.
|
||||||
|
Дата рождения клиента (день и месяц): 15 января.
|
||||||
|
Дата рождения клиента (день и месяц): 15-ЯНВАРЯ.
|
||||||
|
Дата рождения клиента (день и месяц): 15-Января.
|
||||||
|
Дата рождения клиента (день и месяц): 15-января.
|
||||||
|
Дата рождения клиента в анкете: 15 ЯНВАРЯ 1990.
|
||||||
|
Дата рождения клиента в досье: 15 ЯНВ 1990.
|
||||||
|
Дата рождения клиента в кредитной заявке: 15-ЯНВАРЯ-1990.
|
||||||
|
Дата рождения клиента-нерезидента: 03-15-1990.
|
||||||
|
Дата рождения наследника по вкладу: 1990.03.15.
|
||||||
|
Дата рождения подписанта договора: 1990-03-15.
|
||||||
|
Держатель ввёл пин-код 7777 трижды неверно.
|
||||||
|
Для завершения платежа в мобильном приложении введите CVV код 321.
|
||||||
|
Для тестовой карты в анкете указан цвв 000.
|
||||||
|
ЗАКЛАДАТЕЛЬ СЕЙФОВОЙ ЯЧЕЙКИ: ИВАНОВ
|
||||||
|
ИВАН
|
||||||
|
ИВАН И.
|
||||||
|
ИВАНОВ
|
||||||
|
ИВАНОВ И.
|
||||||
|
ИВАНОВИВАНПЕТРОВИЧ
|
||||||
|
ИНН: 7712 3456 7859, указан в заявлении.
|
||||||
|
Иван
|
||||||
|
Иван И.
|
||||||
|
Иванов
|
||||||
|
Иванов И.
|
||||||
|
ИвановИванПетрович
|
||||||
|
Иванова/Петрова
|
||||||
|
Иванович-Петрович
|
||||||
|
Иванович/Петрович
|
||||||
|
Имя владельца счета указано как: Анна/Мария.
|
||||||
|
Имя держателя карты не указано в заявлении.
|
||||||
|
КЛИЕНТ ИВАН ЗАПРОСИЛ ПЕРЕВЫПУСК КАРТЫ
|
||||||
|
КЛИЕНТ ИВАН И. ОФОРМИЛ ДЕБЕТОВУЮ КАРТУ
|
||||||
|
Карта заблокирована по запросу через контактный центр.
|
||||||
|
Клиент передал письмо с указанием ПИН 9087 и реквизитов карты.
|
||||||
|
Клиент подтвердил онлайн-операцию, указав CVV 111.
|
||||||
|
Клиент сообщил ПИН-код карты 2468 в телефонном разговоре.
|
||||||
|
Клиент указал следующий орган выдачи: Паспортно-визовая служба УВД Московского района.
|
||||||
|
Комментарий оператора: клиент назвал пин 8642 для подтверждения операции.
|
||||||
|
МЕСТО РОЖДЕНИЯ: Г. ЕКАТЕРИНБУРГ. АНКЕТА ПРОВЕРЕНА СЛУЖБОЙ БЕЗОПАСНОСТИ БАНКА
|
||||||
|
Место рождения бенефициара по договору страхования: г. Алма-Ата, Республика Казахстан.
|
||||||
|
НОМЕР КАРТЫ: 5469400012345678. ОБРАЩЕНИЕ ЗАРЕГИСТРИРОВАНО В СИСТЕМЕ
|
||||||
|
Новый ПИН-код: 5555, установлен 12.05.2024.
|
||||||
|
Номер платежной карты клиента: 4276 3800 1234 5678, срок действия карты истек.
|
||||||
|
Операция отклонена: проверьте правильность кода на обороте карты 789.
|
||||||
|
Отправитель СБП: ИвановИванПетрович, сумма 5 000,00 руб.
|
||||||
|
Отчество доверенного лица: Иванович-Петрович.
|
||||||
|
Ошибка авторизации платежа: код 258 неверно введен CVV.
|
||||||
|
ПЕТРОВИЧ
|
||||||
|
ПЕТРОВИЧ И.
|
||||||
|
ПИН первой карты: 1234, ПИН второй карты: 5678.
|
||||||
|
ПИН-КОД: 7890
|
||||||
|
ПИН-код - 1234
|
||||||
|
ПИН-код «1234»
|
||||||
|
ПИН: 5678
|
||||||
|
ПЛАТЕЛЬЩИК: ИВАНОВ И. ОПЕРАЦИЯ ПРИНЯТА ОТДЕЛЕНИЕМ № 1
|
||||||
|
ПОЛУЧАТЕЛЬ ПЕРЕВОДА: ИВАНОВИВАНПЕТРОВИЧ
|
||||||
|
ПОРУЧИТЕЛЬ ПО ДОГОВОРУ: ПЕТРОВИЧ И.
|
||||||
|
Паспорт заёмщика 4509 123456, паспорт поручителя 7710 654321.
|
||||||
|
Паспортно-визовая служба УВД Московского района
|
||||||
|
Петрович
|
||||||
|
Петрович И.
|
||||||
|
Пин Код: 1234
|
||||||
|
Пин-код карты: 1234
|
||||||
|
Получатель платежа: Иванов.
|
||||||
|
Получатель платежа: Иванова/Петрова.
|
||||||
|
Поручитель по кредиту: Петрович И.
|
||||||
|
Последние 4 цифры номера карты: 1234.
|
||||||
|
При оформлении виртуальной карты в поле CVV указан код 123.
|
||||||
|
При оформлении ипотечного договора место рождения г. Казань подтверждено паспортом клиента.
|
||||||
|
Система зафиксировала три неудачные попытки ввода CVV кода 999.
|
||||||
|
Срок действия карты истекает в конце месяца.
|
||||||
|
УФМС России по Московской области выдало паспорт гражданину.
|
||||||
|
в графе «отчество созаемщика» указано: петрович
|
||||||
|
в досье клиента прописано гражданство: российская федерация, статус налогового резидента присвоен
|
||||||
|
в досье клиента прописано место рождения: г. самара, гражданство подтверждено документом
|
||||||
|
доверенное лицо по вкладу: иванов и.
|
||||||
|
доверенность оформлена на: иван петрович и., срок действия один год
|
||||||
|
заявитель обращения: и. иван петрович, запрос справки по счету
|
||||||
|
заявка на рефинансирование от: иван петрович
|
||||||
|
и. иван петрович
|
||||||
|
иван
|
||||||
|
иван и.
|
||||||
|
иван иванов
|
||||||
|
иван иванов петрович
|
||||||
|
иван петрович
|
||||||
|
иван петрович и.
|
||||||
|
иванов
|
||||||
|
иванов и.
|
||||||
|
иванов и. п.
|
||||||
|
иванов петрович
|
||||||
|
ивановиванпетрович
|
||||||
|
клиент иван и. запросил выписку по депозиту
|
||||||
|
отправитель перевода: иван иванов
|
||||||
|
отправитель перевода: ивановиванпетрович
|
||||||
|
петрович
|
||||||
|
петрович и.
|
||||||
|
пин 3456
|
||||||
|
пин-код(1234)
|
||||||
|
пин-код=1234
|
||||||
|
плательщик перевода указан: иванов
|
||||||
|
плательщик перевода: иван иванов петрович, счет 40817810000000000002
|
||||||
|
подателем заявки на кредит указано: иван
|
||||||
|
получатель наличных в кассе: иванов и. п.
|
||||||
|
поручитель по договору: иванов петрович
|
||||||
|
созаемщик по договору: петрович и.
|
||||||
Reference in New Issue
Block a user