creditcard 1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/creditcard.rb +88 -0
  2. metadata +37 -0
@@ -0,0 +1,88 @@
1
+ # These functions tell you whether a credit card number is
2
+ # self-consistent using known algorithms for credit card numbers.
3
+ # All non-integer values are removed from the string before parsing
4
+ # so that you don't have to worry about the format of the string.
5
+ #
6
+ # == Usage
7
+ # require "creditcard"
8
+ #
9
+ # "5276 4400 6542 1319".creditcard?
10
+ # => true
11
+ #
12
+ # puts 5276440065421319.creditcard_type
13
+ # => "mastercard"
14
+ #
15
+ # "5276440065421319".creditcard? "visa"
16
+ # => false
17
+ #
18
+ # "5276-4400-6542-1319".creditcard? "mastercard"
19
+ # => true
20
+ #
21
+ # Ported from the Perl version by Jon Orwant and Ivan Kohler
22
+ # http://search.cpan.org/~ivan/Business-CreditCard-0.28/CreditCard.pm
23
+ #
24
+ # Author:: Lucas Carlson (mailto:lucas@rufy.com)
25
+ # Copyright:: Copyright (c) 2005 Lucas Carlson
26
+ # License:: Distributes under the same terms as Ruby
27
+
28
+ module CreditCard
29
+ # Returns a string containing the type of card from the list of known information below.
30
+ # == Known card types
31
+ # *Card Type* *Prefix* *Length*
32
+ # mastercard 51-55 16
33
+ # visa 4 13, 16
34
+ # american_express 34, 37 15
35
+ # diners_club 300-305, 36, 38 14
36
+ # enroute 2014, 2149 15
37
+ # discover 6011 16
38
+ # jcb 3 16
39
+ # jcb 2131, 1800 15
40
+ # bankcard 5610, 56022[1-5] 16
41
+ # switch various 16,18,19
42
+ # solo 63, 6767 16,18,19
43
+ def creditcard_type
44
+ number = self.to_s.gsub(/[^\d]/, "")
45
+
46
+ return 'visa' if number =~ /^4\d{12}(\d{3})?$/
47
+ return 'mastercard' if number =~ /^5[1-5]\d{14}$/
48
+ return 'discover' if number =~ /^6011\d{12}$/
49
+ return 'american_express' if number =~ /^3[47]\d{13}$/
50
+ return 'diners_club' if number =~ /^3(0[0-5]|[68]\d)\d{11}$/
51
+ return 'enroute' if number =~ /^2(014|149)\d{11}$/
52
+ return 'jcb' if number =~ /^(3\d{4}|2131|1800)\d{11}$/
53
+ return 'bankcard' if number =~ /^56(10\d\d|022[1-5])\d{10}$/
54
+ return 'switch' if number =~ /^49(03(0[2-9]|3[5-9])|11(0[1-2]|7[4-9]|8[1-2])|36[0-9]{2})\d{10}(\d{2,3})?$/ || number =~ /^564182\d{10}(\d{2,3})?$/ || number =~ /^6(3(33[0-4][0-9])|759[0-9]{2})\d{10}(\d{2,3})?$/
55
+ return 'solo' if number =~ /^6(3(34[5-9][0-9])|767[0-9]{2})\d{10}(\d{2,3})?$/
56
+ return 'unknown'
57
+ end
58
+
59
+ # Returns true if it validates. Optionally, you can pass a card type as an argument and make sure it is of the correct type.
60
+ # == References
61
+ # - http://perl.about.com/compute/perl/library/nosearch/P073000.htm
62
+ # - http://www.beachnet.com/~hstiles/cardtype.html
63
+ def creditcard?(type = nil)
64
+ number = self.to_s.gsub(/[^\d]/, "")
65
+ return false unless number.length >= 13
66
+
67
+ if type
68
+ return false unless creditcard_type == type
69
+ end
70
+
71
+ sum = 0
72
+ for i in 0..number.length
73
+ weight = number[-1*(i+2), 1].to_i * (2 - (i%2))
74
+ sum += (weight < 10) ? weight : weight - 9
75
+ end
76
+
77
+ return true if number[-1,1].to_i == (10 - sum%10)%10
78
+ return false
79
+ end
80
+ end
81
+
82
+ class String#:nodoc:
83
+ include CreditCard
84
+ end
85
+
86
+ class Integer#:nodoc:
87
+ include CreditCard
88
+ end
metadata ADDED
@@ -0,0 +1,37 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.3
3
+ specification_version: 1
4
+ name: creditcard
5
+ version: !ruby/object:Gem::Version
6
+ version: "1.0"
7
+ date: 2005-01-15
8
+ summary: These functions tell you whether a credit card number is self-consistent using known algorithms for credit card numbers.
9
+ require_paths:
10
+ - lib
11
+ email: lucas@rufy.com
12
+ homepage: http://tech.rufy.com/
13
+ rubyforge_project:
14
+ description: "These functions tell you whether a credit card number is self-consistent using known algorithms for credit card numbers. All non-integer values are removed from the string before parsing so that you don't have to worry about the format of the string."
15
+ autorequire: creditcard
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ -
22
+ - ">"
23
+ - !ruby/object:Gem::Version
24
+ version: 0.0.0
25
+ version:
26
+ platform: ruby
27
+ authors:
28
+ - Lucas Carlson
29
+ files:
30
+ - lib/creditcard.rb
31
+ test_files: []
32
+ rdoc_options: []
33
+ extra_rdoc_files: []
34
+ executables: []
35
+ extensions: []
36
+ requirements: []
37
+ dependencies: []