Coverage for presidio_analyzer / predefined_recognizers / country_specific / germany / de_handelsregister_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 DeHandelsregisterRecognizer(PatternRecognizer): 

7 """ 

8 Recognizes German commercial register numbers (Handelsregisternummer). 

9 

10 The Handelsregisternummer identifies legal entities and sole traders registered 

11 in the German Handelsregister (commercial register), maintained by local 

12 Amtsgerichte (district courts). It is divided into two sections: 

13 

14 - Abteilung A (HRA): Einzelkaufleute (sole traders) and Personengesellschaften 

15 (partnerships: OHG, KG, GmbH & Co. KG, etc.). For Einzelkaufleute, the HRA 

16 number directly identifies a natural person, making it personal data under 

17 DSGVO Art. 4 Nr. 1. 

18 

19 - Abteilung B (HRB): Kapitalgesellschaften (corporations: GmbH, AG, KGaA, 

20 UG (haftungsbeschränkt), etc.). Identifies legal entities; not personal data 

21 unless the entity is a sole shareholder / sole director whose identity is 

22 directly derivable. 

23 

24 Legal basis: § 9, § 14 HGB (Handelsgesetzbuch), Handelsregisterverordnung (HRV). 

25 Data protection: DSGVO Art. 4 Nr. 1 for HRA entries linked to natural persons; BDSG. 

26 

27 Format: 

28 HR[AB] [optional space] [1–6 digits] 

29 Examples: HRA 12345, HRB 123456, HRA12345, HRB 1234 Köln 

30 

31 The `HR[AB]` prefix makes the pattern highly specific, resulting in low false 

32 positive rates even without a checksum. No formal accuracy evaluation has been 

33 performed on a labelled dataset. 

34 

35 :param patterns: List of patterns to be used by this recognizer 

36 :param context: List of context words to increase confidence in detection 

37 :param supported_language: Language this recognizer supports 

38 :param supported_entity: The entity this recognizer can detect 

39 """ 

40 

41 PATTERNS = [ 

42 Pattern( 

43 "Handelsregisternummer HRA/HRB", 

44 r"\bHR[AB]\s*\d{1,6}\b", 

45 0.5, 

46 ), 

47 ] 

48 

49 CONTEXT = [ 

50 "handelsregister", 

51 "handelsregisternummer", 

52 "amtsgericht", 

53 "registergericht", 

54 "hra", 

55 "hrb", 

56 "hr-nummer", 

57 "registerauszug", 

58 "handelsregistereintrag", 

59 "firma", 

60 "gesellschaft", 

61 "gmbh", 

62 "ag", 

63 "ug", 

64 "kg", 

65 "ohg", 

66 "einzelkaufmann", 

67 "einzelkauffrau", 

68 "handelsregisterblattnummer", 

69 ] 

70 

71 def __init__( 

72 self, 

73 patterns: Optional[List[Pattern]] = None, 

74 context: Optional[List[str]] = None, 

75 supported_language: str = "de", 

76 supported_entity: str = "DE_HANDELSREGISTER", 

77 name: Optional[str] = None, 

78 ): 

79 patterns = patterns if patterns else self.PATTERNS 

80 context = context if context else self.CONTEXT 

81 super().__init__( 

82 supported_entity=supported_entity, 

83 patterns=patterns, 

84 context=context, 

85 supported_language=supported_language, 

86 name=name, 

87 )