Class: PiiScrubber::Detectors::CreditCard

Inherits:
Base
  • Object
show all
Defined in:
lib/pii_scrubber/detectors/credit_card.rb

Constant Summary collapse

CREDIT_CARD_REGEX =

Matches 13-19 digit card numbers separated by optional dashes or spaces

/\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|(?:2131|1800|35\d{3})\d{11})\b/
GENERIC_CARD_REGEX =
/\b(?:\d[ -]*?){13,19}\b/

Instance Attribute Summary

Attributes inherited from Base

#name

Instance Method Summary collapse

Constructor Details

#initializeCreditCard

Returns a new instance of CreditCard.



12
13
14
# File 'lib/pii_scrubber/detectors/credit_card.rb', line 12

def initialize
  super(name: :credit_card)
end

Instance Method Details

#patternsObject



16
17
18
# File 'lib/pii_scrubber/detectors/credit_card.rb', line 16

def patterns
  [CREDIT_CARD_REGEX, GENERIC_CARD_REGEX]
end

#replace(match, strategy: :placeholder, mask_char: "*", hmac_salt: nil) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/pii_scrubber/detectors/credit_card.rb', line 27

def replace(match, strategy: :placeholder, mask_char: "*", hmac_salt: nil)
  return super unless strategy == :mask

  digits = match.scan(/\d/)
  return super if digits.size < 4

  # Show last 4 digits
  last_four = digits.last(4).join
  "#{mask_char * 12}#{last_four}"
end

#valid?(match) ⇒ Boolean

Returns:

  • (Boolean)


20
21
22
23
24
25
# File 'lib/pii_scrubber/detectors/credit_card.rb', line 20

def valid?(match)
  digits = match.scan(/\d/).map(&:to_i)
  return false unless digits.size >= 13 && digits.size <= 19

  luhn_valid?(digits)
end