Coverage for presidio_analyzer / predefined_recognizers / country_specific / korea / kr_passport_recognizer.py: 100%
9 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-03-29 09:03 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-03-29 09:03 +0000
1from typing import List, Optional
3from presidio_analyzer import Pattern, PatternRecognizer
6class KrPassportRecognizer(PatternRecognizer):
7 """
8 Recognize Korean Passport Number.
10 https://learn.microsoft.com/en-us/purview/sit-defn-south-korea-passport-number
12 the current passport number format:
13 - one letter 'M' or 'm' or 'S' or 's' or 'R' or 'r' or 'O' or 'o' or 'D' or 'd'
14 - three digits
15 - one letter (A-Z, a-z)
16 - four digits
18 the previous passport number format:
19 - one letter 'M' or 'm' or 'S' or 's' or 'R' or 'r' or 'O' or 'o' or 'D' or 'd'
20 - eight digits
21 """
23 PATTERNS = [
24 Pattern(
25 "Passport Number (Current)",
26 r"(?<![A-Z0-9a-z])[MmSsRrOoDd]\d{3}[A-Za-z]\d{4}(?![0-9])",
27 0.1,
28 ),
29 Pattern(
30 "Passport Number (Previous)",
31 r"(?<![A-Z0-9a-z])[MmSsRrOoDd]\d{8}(?![0-9])",
32 0.05,
33 ),
34 ]
36 CONTEXT = [
37 "Korean passport",
38 "Korean passport number",
39 "대한민국 여권",
40 "여권",
41 "passport",
42 "passport number",
43 ]
45 def __init__(
46 self,
47 patterns: Optional[List[Pattern]] = None,
48 context: Optional[List[str]] = None,
49 supported_language: str = "kr",
50 supported_entity: str = "KR_PASSPORT",
51 ):
52 patterns = patterns if patterns else self.PATTERNS
53 context = context if context else self.CONTEXT
54 super().__init__(
55 supported_entity=supported_entity,
56 patterns=patterns,
57 context=context,
58 supported_language=supported_language,
59 )