# Class: BetterCap::Parsers::CreditCard

Inherits:
Base
• Object
show all
Defined in:
lib/bettercap/sniffer/parsers/creditcard.rb

CC parser.

## Constant Summary collapse

PARSERS =
```[
# All major cards.
/(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})/m,
# American Express
/(3[47][0-9]{13})/m,
# Diners Club
/(3(?:0[0-5]|[68][0-9])[0-9]{11})/m,
# Discover
/(6011[0-9]{12})/m,
# MasterCard
/(5[1-5][0-9]{14})/m,
# Visa
/(4[0-9]{12}(?:[0-9]{3})?)/m
].freeze```

## Instance Method Summary collapse

• Validate `cc` with Lughn algorithm.

## Constructor Details

This class inherits a constructor from BetterCap::Parsers::Base

## Instance Method Details

### #luhn?(cc) ⇒ Boolean

Validate `cc` with Lughn algorithm.

Returns:

• (Boolean)
 ``` 46 47 48 49 50 51 52 53 54 55 56 57 58``` ```# File 'lib/bettercap/sniffer/parsers/creditcard.rb', line 46 def luhn?(cc) digits = cc.split(//).map(&:to_i) last = digits.pop products = digits.reverse.map.with_index do |n,i| i.even? ? n*2 : n*1 end.reverse sum = products.inject(0) { |t,p| t + p.to_s.split(//).map(&:to_i).inject(:+) } checksum = 10 - (sum % 10) checksum == 10 ? 0 : checksum ( last == checksum ) end```

### #on_packet(pkt) ⇒ Object

 ``` 32 33 34 35 36 37 38 39 40 41 42 43``` ```# File 'lib/bettercap/sniffer/parsers/creditcard.rb', line 32 def on_packet( pkt ) begin payload = pkt.to_s PARSERS.each do |expr| matches = payload.scan( expr ) matches.each do |m| StreamLogger.log_raw( pkt, 'CREDITCARD', m ) if luhn?(m) end break unless matches.empty? end rescue; end end```