module LuhnPro
Public Class Methods
get_check_num(number)
click to toggle source
# File lib/luhn_pro.rb, line 14 def self.get_check_num(number) #get check number for 'number' with Luhn method #nil if number is empty string return nil if number.empty? a=(number.gsub(/[^\d]/, "").split("").map {|i| i.to_i}).reverse #gsub - clean up number, delete not number characters #split - split to characters #map - make an array #to_i - convert each element to integer #reverse - reverse array for right order #...otherwise wrong result if numbers size is odd a.each_index {|i| a[i]= i%2==0 ? (a[i]*2>9?a[i]*2-10+1:a[i]*2):a[i]} #even indexes = same value #odds indexes = doubble value, more then 9 => e.g. ´12=1+2=>3´ a.inject(:+)%10==0 ? 0.to_s : (10-a.inject(:+)%10).to_s #summarize values and mod 10, 0 if mod10 = 0, otherwise 10-mod10 end
getnum(number)
click to toggle source
# File lib/luhn_pro.rb, line 2 def self.getnum(number) #get number with checknumber return nil if number.empty? number+get_check_num(number) end
isvalid?(number)
click to toggle source
# File lib/luhn_pro.rb, line 8 def self.isvalid?(number) #true if number has correct checknumber return nil if number.empty? get_check_num(number[0..-2]) == number[-1] ? true : false end