Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#Kotlin
kotlin.code.style=official

version=1.4.7
version=1.4.8
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,14 @@ object DODID : IHyperMatcher, IKotlinMatcher {
)

override fun getJavaPatterns(requireKeywords: Boolean): List<String> {
return javaPatterns
return if (requireKeywords) {
javaPatterns
} else {
// Return pattern without keywords as fallback
listOf(
"""(?ix)(?<![\p{L}\d])$numberPattern(?![\d\p{L}])"""
)
}
}

override val regexOptions = setOf(
Expand All @@ -47,7 +54,14 @@ object DODID : IHyperMatcher, IKotlinMatcher {
)

override fun getHyperPatterns(requireKeywords: Boolean): List<String> {
return hyperPatterns
return if (requireKeywords) {
hyperPatterns
} else {
// Return pattern without keywords as fallback
listOf(
"""(?:^|[^0-9a-zA-Z])[0-9]{10}(?:[^0-9a-zA-Z]|$)"""
)
}
}

override val expressionOptions = setOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ object DriverLicense : IHyperMatcher, IKotlinMatcher {
)

override fun getJavaPatterns(requireKeywords: Boolean): List<String> {
// Always require keywords for driver license to avoid false positives
val keywordsPart = """(?:водительское\s+удостоверение|номер\s+водительского\s+удостоверения|номер\s+удостоверения|номер\s+ВУ|ВУ\s+№|driver\s+license|license\s+number|driving\s+license)"""
val baseKeywords = """(?:водительское\s+удостоверение|номер\s+водительского\s+удостоверения|номер\s+удостоверения|номер\s+ВУ|ВУ\s+№|driver\s+license|license\s+number|driving\s+license)"""
val keywordsPart = baseKeywords + if (!requireKeywords) "?" else ""
return listOf(
"""
(?ix)
Expand All @@ -65,8 +65,8 @@ object DriverLicense : IHyperMatcher, IKotlinMatcher {
)

override fun getHyperPatterns(requireKeywords: Boolean): List<String> {
// Always require keywords for driver license to avoid false positives
val keywordsPart = """(?:водительское\s+удостоверение|номер\s+водительского\s+удостоверения|номер\s+удостоверения|номер\s+ВУ|ВУ\s+№|driver\s+license|license\s+number|driving\s+license)"""
val baseKeywords = """(?:водительское\s+удостоверение|номер\s+водительского\s+удостоверения|номер\s+удостоверения|номер\s+ВУ|ВУ\s+№|driver\s+license|license\s+number|driving\s+license)"""
val keywordsPart = baseKeywords + if (!requireKeywords) "?" else ""
return listOf(
"""(?:^|[\s\(\[\{«"'])$keywordsPart\s*[:\-]?\s*\d{2}\s\d{2}\s\d{6}(?:[^0-9a-zA-ZА-ЯЁа-яё]|$)"""
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ object EducationDoc : IHyperMatcher, IKotlinMatcher {
)

override fun getJavaPatterns(requireKeywords: Boolean): List<String> {
// Always require keywords for education documents to avoid false positives
val keywordsPart = """(?:диплом|аттестат|свидетельство\s+об\s+образовании|сертификат|удостоверение|документ\s+об\s+образовании|образовательный\s+документ|номер\s+диплома|серия\s+и\s+номер\s+диплома|номер\s+аттестата|серия\s+и\s+номер\s+аттестата|номер\s+свидетельства|серия\s+и\s+номер\s+свидетельства)"""
val baseKeywords = """(?:диплом|аттестат|свидетельство\s+об\s+образовании|сертификат|удостоверение|документ\s+об\s+образовании|образовательный\s+документ|номер\s+диплома|серия\s+и\s+номер\s+диплома|номер\s+аттестата|серия\s+и\s+номер\s+аттестата|номер\s+свидетельства|серия\s+и\s+номер\s+свидетельства)"""
val keywordsPart = baseKeywords + if (!requireKeywords) "?" else ""
return listOf(
"""
(?ix)
Expand Down Expand Up @@ -90,8 +90,8 @@ object EducationDoc : IHyperMatcher, IKotlinMatcher {
)

override fun getHyperPatterns(requireKeywords: Boolean): List<String> {
// Always require keywords for education documents to avoid false positives
val keywordsPart = """(?:диплом|аттестат|свидетельство\s+об\s+образовании|сертификат|удостоверение|документ\s+об\s+образовании|образовательный\s+документ|номер\s+диплома|серия\s+и\s+номер\s+диплома|номер\s+аттестата|серия\s+и\s+номер\s+аттестата|номер\s+свидетельства|серия\s+и\s+номер\s+свидетельства)"""
val baseKeywords = """(?:диплом|аттестат|свидетельство\s+об\s+образовании|сертификат|удостоверение|документ\s+об\s+образовании|образовательный\s+документ|номер\s+диплома|серия\s+и\s+номер\s+диплома|номер\s+аттестата|серия\s+и\s+номер\s+аттестата|номер\s+свидетельства|серия\s+и\s+номер\s+свидетельства)"""
val keywordsPart = baseKeywords + if (!requireKeywords) "?" else ""
return listOf(
"""(?:^|[^\w])$keywordsPart\s*[:\-]?\s*\d{6}\s+\d{7}(?:[^\w]|$)""",
"""(?:^|[^\w])$keywordsPart\s*[:\-]?\s*\d{2}\s+[А-ЯЁ]{2}\s+\d{6,7}(?:[^\w]|$)"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,16 @@ object MedicareUS : IHyperMatcher, IKotlinMatcher {
"""(?i)(?:medicare|mbi|health\s*insurance|medical\s*insurance)(?:\s*[:\-#]\s*|\s+)([0-9][a-z0-9]{3}[\s\t\-]*[a-z0-9]{3}[\s\t\-]*[a-z0-9]{4})(?:[^a-zA-Z0-9]|$)""",
"""(?:^|[^a-zA-Z0-9])([0-9][a-z0-9]{3}[\s\t\-]*[a-z0-9]{3}[\s\t\-]*[a-z0-9]{4})(?:[^a-zA-Z0-9]|$)"""
)

override fun getJavaPatterns(requireKeywords: Boolean): List<String> {
return if (requireKeywords) {
// Return only pattern with keywords (more strict, reduces false positives)
listOf(javaPatterns[0])
} else {
// Return both patterns (with and without keywords)
javaPatterns
}
}
override val regexOptions = setOf(
RegexOption.IGNORE_CASE,
RegexOption.MULTILINE
Expand All @@ -27,6 +37,16 @@ object MedicareUS : IHyperMatcher, IKotlinMatcher {
"""(?:medicare|mbi|health\s*insurance|medical\s*insurance)(?:\s*[:\-#]\s*|\s+)[0-9][a-z0-9]{3}[\s\t\-]*[a-z0-9]{3}[\s\t\-]*[a-z0-9]{4}(?:[^a-zA-Z0-9]|$)""",
"""(?:^|[^a-zA-Z0-9])[0-9][a-z0-9]{3}[\s\t\-]*[a-z0-9]{3}[\s\t\-]*[a-z0-9]{4}(?:[^a-zA-Z0-9]|$)"""
)

override fun getHyperPatterns(requireKeywords: Boolean): List<String> {
return if (requireKeywords) {
// Return only pattern with keywords (more strict, reduces false positives)
listOf(hyperPatterns[0])
} else {
// Return both patterns (with and without keywords)
hyperPatterns
}
}
override val expressionOptions = setOf(
ExpressionOption.MULTILINE,
ExpressionOption.CASELESS,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ object MilitaryID : IHyperMatcher, IKotlinMatcher {
)

override fun getJavaPatterns(requireKeywords: Boolean): List<String> {
// Always require keywords for military ID to avoid false positives
val keywordsPart = """(?:удостоверение\s+личности\s+военнослужащего|номер\s+удостоверения\s+личности\s+военнослужащего|серия\s+и\s+номер\s+удостоверения\s+личности\s+военнослужащего|номер\s+УЛВ|УЛВ\s+№|военный\s+билет|номер\s+военного\s+билета)"""
val baseKeywords = """(?:удостоверение\s+личности\s+военнослужащего|номер\s+удостоверения\s+личности\s+военнослужащего|серия\s+и\s+номер\s+удостоверения\s+личности\s+военнослужащего|номер\s+УЛВ|УЛВ\s+№|военный\s+билет|номер\s+военного\s+билета)"""
val keywordsPart = baseKeywords + if (!requireKeywords) "?" else ""
return listOf(
"""
(?ix)
Expand All @@ -65,8 +65,8 @@ object MilitaryID : IHyperMatcher, IKotlinMatcher {
)

override fun getHyperPatterns(requireKeywords: Boolean): List<String> {
// Always require keywords for military ID to avoid false positives
val keywordsPart = """(?:удостоверение\s+личности\s+военнослужащего|номер\s+удостоверения\s+личности\s+военнослужащего|серия\s+и\s+номер\s+удостоверения\s+личности\s+военнослужащего|номер\s+УЛВ|УЛВ\s+№|военный\s+билет|номер\s+военного\s+билета)"""
val baseKeywords = """(?:удостоверение\s+личности\s+военнослужащего|номер\s+удостоверения\s+личности\s+военнослужащего|серия\s+и\s+номер\s+удостоверения\s+личности\s+военнослужащего|номер\s+УЛВ|УЛВ\s+№|военный\s+билет|номер\s+военного\s+билета)"""
val keywordsPart = baseKeywords + if (!requireKeywords) "?" else ""
return listOf(
"""(?:^|[\s\r\n\(\)\"\'\[\]\{\};,.:\.!?])$keywordsPart\s*[:\-]?\s*[А-ЯA-Z]{2}[\s№\-]*\d{7}\b"""
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ object OGRNIP : IHyperMatcher, IKotlinMatcher {
)

override fun getJavaPatterns(requireKeywords: Boolean): List<String> {
// Always require keywords for OGRNIP to avoid false positives
val keywordsPart = """(?:ОГРНИП|основной\s+государственный\s+регистрационный\s+номер\s+индивидуального\s+предпринимателя|регистрационный\s+номер\s+в\s+реестре\s+ФЛ\s+ЧП|регистрационный\s+номер\s+индивидуального\s+предпринимателя|государственный\s+регистрационный\s+номер\s+ИП|номер\s+ОГРНИП|серия\s+и\s+номер\s+ОГРНИП)"""
val baseKeywords = """(?:ОГРНИП|основной\s+государственный\s+регистрационный\s+номер\s+индивидуального\s+предпринимателя|регистрационный\s+номер\s+в\s+реестре\s+ФЛ\s+ЧП|регистрационный\s+номер\s+индивидуального\s+предпринимателя|государственный\s+регистрационный\s+номер\s+ИП|номер\s+ОГРНИП|серия\s+и\s+номер\s+ОГРНИП)"""
val keywordsPart = baseKeywords + if (!requireKeywords) "?" else ""
return listOf(
"""
(?ix)
Expand All @@ -65,8 +65,8 @@ object OGRNIP : IHyperMatcher, IKotlinMatcher {
)

override fun getHyperPatterns(requireKeywords: Boolean): List<String> {
// Always require keywords for OGRNIP to avoid false positives
val keywordsPart = """(?:ОГРНИП|основной\s+государственный\s+регистрационный\s+номер\s+индивидуального\s+предпринимателя|регистрационный\s+номер\s+в\s+реестре\s+ФЛ\s+ЧП|регистрационный\s+номер\s+индивидуального\s+предпринимателя|государственный\s+регистрационный\s+номер\s+ИП|номер\s+ОГРНИП|серия\s+и\s+номер\s+ОГРНИП)"""
val baseKeywords = """(?:ОГРНИП|основной\s+государственный\s+регистрационный\s+номер\s+индивидуального\s+предпринимателя|регистрационный\s+номер\s+в\s+реестре\s+ФЛ\s+ЧП|регистрационный\s+номер\s+индивидуального\s+предпринимателя|государственный\s+регистрационный\s+номер\s+ИП|номер\s+ОГРНИП|серия\s+и\s+номер\s+ОГРНИП)"""
val keywordsPart = baseKeywords + if (!requireKeywords) "?" else ""
return listOf(
"""(?:^|[^\w])$keywordsPart\s*[:\-]?\s*[34]\d{14}(?:[^\w]|$)"""
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ object OKPO : IHyperMatcher, IKotlinMatcher {
)

override fun getJavaPatterns(requireKeywords: Boolean): List<String> {
// Always require keywords for OKPO to avoid false positives
val keywordsPart = """(?:ОКПО|код\s+ОКПО|номер\s+ОКПО|общероссийский\s+классификатор\s+предприятий\s+и\s+организаций|классификатор\s+предприятий\s+и\s+организаций|серия\s+и\s+номер\s+ОКПО)"""
val baseKeywords = """(?:ОКПО|код\s+ОКПО|номер\s+ОКПО|общероссийский\s+классификатор\s+предприятий\s+и\s+организаций|классификатор\s+предприятий\s+и\s+организаций|серия\s+и\s+номер\s+ОКПО)"""
val keywordsPart = baseKeywords + if (!requireKeywords) "?" else ""
return listOf(
"""
(?ix)
Expand All @@ -66,8 +66,8 @@ object OKPO : IHyperMatcher, IKotlinMatcher {
)

override fun getHyperPatterns(requireKeywords: Boolean): List<String> {
// Always require keywords for OKPO to avoid false positives
val keywordsPart = """(?:ОКПО|код\s+ОКПО|номер\s+ОКПО|общероссийский\s+классификатор\s+предприятий\s+и\s+организаций|классификатор\s+предприятий\s+и\s+организаций|серия\s+и\s+номер\s+ОКПО)"""
val baseKeywords = """(?:ОКПО|код\s+ОКПО|номер\s+ОКПО|общероссийский\s+классификатор\s+предприятий\s+и\s+организаций|классификатор\s+предприятий\s+и\s+организаций|серия\s+и\s+номер\s+ОКПО)"""
val keywordsPart = baseKeywords + if (!requireKeywords) "?" else ""
return listOf(
"""(?:^|[^\w])$keywordsPart\s*[:\-]?\s*\d{8}(?:[^\w]|$)""",
"""(?:^|[^\w])$keywordsPart\s*[:\-]?\s*\d{10}(?:[^\w]|$)"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ object OMS : IHyperMatcher, IKotlinMatcher {
)

override fun getJavaPatterns(requireKeywords: Boolean): List<String> {
// Always require keywords for OMS to avoid false positives (but exclude standalone "полис")
val keywordsPart = """(?:полис\s+обязательного\s+медицинского\s+страхования|номер\s+полиса\s+ОМС|номер\s+полиса\s+обязательного\s+медицинского\s+страхования|серия\s+и\s+номер\s+полиса\s+ОМС|серия\s+и\s+номер\s+полиса|номер\s+полиса|полис\s+ОМС|ОМС\s+№|омс|страховка|страхование)"""
val baseKeywords = """(?:полис\s+обязательного\s+медицинского\s+страхования|номер\s+полиса\s+ОМС|номер\s+полиса\s+обязательного\s+медицинского\s+страхования|серия\s+и\s+номер\s+полиса\s+ОМС|серия\s+и\s+номер\s+полиса|номер\s+полиса|полис\s+ОМС|ОМС\s+№|омс|страховка|страхование)"""
val keywordsPart = baseKeywords + if (!requireKeywords) "?" else ""
return listOf(
"""
(?ix)
Expand All @@ -70,8 +70,8 @@ object OMS : IHyperMatcher, IKotlinMatcher {
)

override fun getHyperPatterns(requireKeywords: Boolean): List<String> {
// Always require keywords for OMS to avoid false positives (but exclude standalone "полис")
val keywordsPart = """(?:полис\s+обязательного\s+медицинского\s+страхования|номер\s+полиса\s+ОМС|номер\s+полиса\s+обязательного\s+медицинского\s+страхования|серия\s+и\s+номер\s+полиса\s+ОМС|серия\s+и\s+номер\s+полиса|номер\s+полиса|полис\s+ОМС|ОМС\s+№|омс|страховка|страхование)"""
val baseKeywords = """(?:полис\s+обязательного\s+медицинского\s+страхования|номер\s+полиса\s+ОМС|номер\s+полиса\s+обязательного\s+медицинского\s+страхования|серия\s+и\s+номер\s+полиса\s+ОМС|серия\s+и\s+номер\s+полиса|номер\s+полиса|полис\s+ОМС|ОМС\s+№|омс|страховка|страхование)"""
val keywordsPart = baseKeywords + if (!requireKeywords) "?" else ""
return listOf(
"""(?:^|[^\w])$keywordsPart\s*[:\-]?\s*[0-9]{4}[\s\t-]*[0-9]{4}[\s\t-]*[0-9]{4}[\s\t-]*[0-9]{4}(?:[^\w]|$)"""
)
Expand Down
Loading