Sha256: fbd6f5c4963546da0d55c9ff8e8680600a5d08c5526293bedaa697d91267cce4
Contents?: true
Size: 937 Bytes
Versions: 1
Compression:
Stored size: 937 Bytes
Contents
# frozen_string_literal: true require 'credit_card_validations' module SensitiveDataFilter module Types module CreditCard SEPARATORS = /[\s-]/ SEPRS = SEPARATORS.source + '*' LENGTHS = (11..19) CARD = Regexp.new( LENGTHS.map { |length| /(?=((?<!\d)(?:\d#{SEPRS}){#{length - 1}}\d(?!\d))?)/.source }.join ) FILTERED = '[FILTERED]' module_function def valid?(number) return false unless number.is_a? String CreditCardValidations::Detector.new(number.gsub(SEPARATORS, '')).brand.present? end module_function def scan(value) return [] unless value.is_a? String value.scan(CARD).flatten.compact.select { |card| valid?(card) } end module_function def mask(value) return value unless value.is_a? String scan(value).inject(value) { |acc, elem| acc.gsub(elem, FILTERED) } end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
sensitive_data_filter-0.2.3 | lib/sensitive_data_filter/types/credit_card.rb |