class SocialSecurityNumber::De
SocialSecurityNumber::De
validates Germany Steuer-IdNr en.wikipedia.org/wiki/National_identification_number#Germany
Public Instance Methods
validate()
click to toggle source
# File lib/social_security_number/country/de.rb, line 5 def validate @error = if !check_digits 'it is not number' elsif !check_length(11) 'number should be length of 11' elsif @civil_number[0].to_i.zero? 'first number is invalid' # elsif !check_digits_apperings # 'first number is invalid' elsif !check_control_sum 'number control sum invalid' end end
Private Instance Methods
check_control_sum()
click to toggle source
# File lib/social_security_number/country/de.rb, line 21 def check_control_sum count_last_number == @civil_number[10].to_i end
check_digits_apperings()
click to toggle source
# File lib/social_security_number/country/de.rb, line 49 def check_digits_apperings out = true if validate_2015 out = false elsif validate_2016 out = false end out end
count_dig(digits, number)
click to toggle source
# File lib/social_security_number/country/de.rb, line 60 def count_dig(digits, number) (digits.select { |count| count.to_i == number }).count end
count_last_number()
click to toggle source
# File lib/social_security_number/country/de.rb, line 25 def count_last_number sum = 0 product = 10 digits(@civil_number.to_s[0..9]).each_with_index do |digit, _i| sum = (digit.to_i + product) % 10 sum = 10 if sum.zero? product = (sum * 2) % 11 end checksum = 11 - product checksum = 0 if checksum == 10 checksum end
digits(number)
click to toggle source
# File lib/social_security_number/country/de.rb, line 45 def digits(number) number.split(//) end
group_number(number)
click to toggle source
# File lib/social_security_number/country/de.rb, line 39 def group_number(number) out = [] digits(number).group_by(&:itself).map { |k, v| out[k.to_i] = v.count } out end
validate_2015()
click to toggle source
# File lib/social_security_number/country/de.rb, line 64 def validate_2015 # validate ids that are only valid since 2015 # one digit appears exactly twice and all other digits appear exactly once digit = group_number(@civil_number.to_s[0..9]).compact count_dig(digit, 2) != 1 && count_dig(digit, 1) != 8 end
validate_2016()
click to toggle source
# File lib/social_security_number/country/de.rb, line 71 def validate_2016 # validate ids that are only valid since 2016 # two digits appear zero times and one digit appears exactly three times # and all other digits appear exactly once digit = group_number(@civil_number.to_s[0..9]).compact count_dig(digit, 2).zero? && count_dig(digit, 3) != 1 && count_dig(digit, 1) != 7 end