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

1from typing import List, Optional 

2 

3from presidio_analyzer import Pattern, PatternRecognizer 

4 

5 

6class KrPassportRecognizer(PatternRecognizer): 

7 """ 

8 Recognize Korean Passport Number. 

9 

10 https://learn.microsoft.com/en-us/purview/sit-defn-south-korea-passport-number 

11 

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 

17 

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 """ 

22 

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 ] 

35 

36 CONTEXT = [ 

37 "Korean passport", 

38 "Korean passport number", 

39 "대한민국 여권", 

40 "여권", 

41 "passport", 

42 "passport number", 

43 ] 

44 

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 )