Module: TcKimlikNoDogrulama

Defined in:
lib/tc_kimlik_no_dogrulama.rb,
lib/tc_kimlik_no_dogrulama/version.rb

Constant Summary collapse

VERSION =
"0.1"

Class Method Summary collapse

Class Method Details

.verify(tcKimlikNo) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/tc_kimlik_no_dogrulama.rb', line 4

def self.verify(tcKimlikNo)
  tcKimlikNo = tcKimlikNo.to_s

  # Kontrol 1: TC Kimlik numarası boş olmamalıdır.
  # Kontrol 2: T.C. Kimlik numarası 11 karakter olmalıdır.
  # Kontrol 3: T.C. Kimlik numarası 0 ile başlayamaz.
  # Kontrol 4: T.C. Kimlik numarasının tüm karakterleri sayı olmalıdır.
  if (tcKimlikNo.nil? || tcKimlikNo.length != 11 || !numeric?(tcKimlikNo) || tcKimlikNo[0] == 0)
    return false
  end

  digits = tcKimlikNo.each_char.map(&:to_i)

  sum = 0
  sum_odd = 0
  sum_even = 0
  digits[0..9].each_with_index do |value, i|
    sum += value
    if i.even?
      sum_even += value
    else
      sum_odd += value
    end
  end

  # 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.
  if(sum_odd * 7 - sum_even) % 10 == digits[9]
    return true
  end

  # 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.
  if sum % 10 == digits[10]
    return true
  end

  # TC Kimlik no kontrollerden geçemedi.
  return false
end