Class: PiiScrubber::Detectors::CanadianSin
- Defined in:
- lib/pii_scrubber/detectors/canadian_sin.rb
Constant Summary collapse
- SIN_REGEX =
Matches 9-digit Canadian Social Insurance Numbers (e.g. 046-454-286, 046 454 286, 046454286)
/\b[0-9]{3}[ -]?[0-9]{3}[ -]?[0-9]{3}\b/
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
-
#initialize ⇒ CanadianSin
constructor
A new instance of CanadianSin.
- #patterns ⇒ Object
- #replace(match, strategy: :placeholder, mask_char: "*", hmac_salt: nil) ⇒ Object
- #valid?(match) ⇒ Boolean
Constructor Details
#initialize ⇒ CanadianSin
Returns a new instance of CanadianSin.
11 12 13 |
# File 'lib/pii_scrubber/detectors/canadian_sin.rb', line 11 def initialize super(name: :canadian_sin) end |
Instance Method Details
#patterns ⇒ Object
15 16 17 |
# File 'lib/pii_scrubber/detectors/canadian_sin.rb', line 15 def patterns [SIN_REGEX] end |
#replace(match, strategy: :placeholder, mask_char: "*", hmac_salt: nil) ⇒ Object
29 30 31 32 33 34 35 36 37 |
# File 'lib/pii_scrubber/detectors/canadian_sin.rb', line 29 def replace(match, strategy: :placeholder, mask_char: "*", hmac_salt: nil) return super unless strategy == :mask digits = match.scan(/\d/) return super if digits.size != 9 last_three = digits.last(3).join "#{mask_char * 3}-#{mask_char * 3}-#{last_three}" end |
#valid?(match) ⇒ Boolean
19 20 21 22 23 24 25 26 27 |
# File 'lib/pii_scrubber/detectors/canadian_sin.rb', line 19 def valid?(match) digits = match.scan(/\d/).map(&:to_i) return false unless digits.size == 9 # First digit cannot be 0 or 8 in valid Canadian SINs return false if [0, 8].include?(digits.first) luhn_valid?(digits) end |