class TcKimlikNoDogrulama::Validations::Format

Attributes

sum[RW]
sum_even[RW]
sum_odd[RW]

Public Class Methods

new(value) click to toggle source
# File lib/tc_kimlik_no_dogrulama/validations/format.rb, line 5
def initialize(value)
  @value = value.to_s
  @sum = 0
  @sum_odd = 0
  @sum_even = 0
end

Public Instance Methods

valid?() click to toggle source
# File lib/tc_kimlik_no_dogrulama/validations/format.rb, line 12
def valid?
  return false if starts_with_zero?

  # Kontrol 1: 1 3 5 7 ve 9 hanelerinin toplamının 7 katından, 2 4 6 ve 8
  # hanelerin toplamı çıkartıldığında, elde edilen sonucun 10'a bölümünden
  # kalan sayı, yani Mod 10'u bize 10. haneyi vermelidir.
  # Kontrol 2: 1 2 3 4 5 6 7 8 9 ve 10 hanelerinin toplamından elde edilen sonucun
  # 10'a bölümünden kalan sayı, yani Mod 10'u bize 11. haneyi vermelidir.

  calculate_sums
  (sum_odd * 7 - sum_even) % 10 == digits[9] && sum % 10 == digits[10]
end

Private Instance Methods

calculate_sums() click to toggle source
# File lib/tc_kimlik_no_dogrulama/validations/format.rb, line 38
def calculate_sums
  digits[0..9].each.with_index(1) do |number, index|
    @sum += number
    next if index > 9

    index.even? ? @sum_even += number : @sum_odd += number
  end
end
digits() click to toggle source
# File lib/tc_kimlik_no_dogrulama/validations/format.rb, line 34
def digits
  @digits ||= @value.each_char.map(&:to_i)
end
starts_with_zero?() click to toggle source
# File lib/tc_kimlik_no_dogrulama/validations/format.rb, line 29
def starts_with_zero?
  # T.C. Kimlik numarası 0 ile başlayamaz.
  @value.chr == '0'
end