25 Ağustos 2015

Modulus 11 ve Check Digit

Diyelim ki elimizde harflerden ve sayılardan veya sadece sayılardan oluşan bir karakter dizisi var. Bu karakter dizisi banka hesap numarası, konteyner numarası, ISBN numarası vb. olabilir. Bu numaraları manuel olarak bir sisteme girdiğimizi veya başka birisine mail ortamında bildirdiğimizi düşünelim. Peki bu karakter dizilerini klavyeden girerken hatalı girebilir miyiz? Tabi ki evet. Peki bu karakter dizisinin doğruluğundan nasıl emin olabiliriz? Hem de herhangi bir sistemden sorgulamadan. 

Karakterler arasında matematiksel bir bağ olsa ve son karakter (Check Digit) bu matematiksel işlemlerin sağlaması niteliğinde olsa. Aslında bütün hikaye bundan ibaret. Uzun karakter dizilerinin hatalı girilebilmesi ihtimaline karşı bu diziler içerisinde yapılacak matematiksel bazı işlemlerle doğruluğunu kontrol etmek. İşte bunun için Modülüs 11 algoritması kullanmış ve bir Check Digit'e ulaşılmış. Ben birazda işimle alakalı olduğu için bir konteyner numarasının doğruluğunu Modülüs 11 ve Check Digit mantığı ile nasıl buluruz onu anlatacağım.




Öncelikle konteyner numarası hakkında biraz bilgi vereyim; 

- Bir konteyner numarası 4 harf 6 sayı ve 1 check digit yani doğrulama numarasından oluşur.
- 4 harfin 3 tanesi konteyner sahibini temsil eder.
- Bu 4 harfin sonuncusu konteynerin kategorisini ifade eder ve bu harfler U, J veya Z olabilir.
- U tüm taşıma konteynerleri için kullanılır
- J bir ekipmana bağlı fakat ayrılabilir konteynerler için kullanılır
- Z ise dorse römork ve şasiler için kullanılır
- Devam eden 6 rakam konteynerin serisi
- En sonda bulunan rakam ise konteynerin kontrol rakamı yani Check Digittir.


Peki bu içinde harfler bulunan karakter dizisi ile matematiksel işlemleri nasıl yapacağız? 

Bunu aşağıdaki tabloda (Tablo-1) bulunan harf değer eşlemesi yardımı ile yapacağız. Bu değerler 10 dan başlayacak ve 11’in katları kullanılmayacak şekilde Z ye kadar verilecektir.


Tablo-1








A
10

N
25


B
12

O
26


C
13

P
27


D
14

Q
28


E
15

R
29


F
16

S
30


G
17

T
31


H
18

U
32


I
19

V
34


J
20

W
35


K
21

X
36


L
23

Y
37


M
24

Z
38









Harfler tamam peki sayılar? 

Sayılar kendi değerleri ile alınacaklar. 

Şimdi ARKU 830294-4 konteyner numarasının modulus 11 ile doğruluğunu kontrol edelim;

- 4 harften oluşan prefix ve 
- 6 sayıdan oluşan seri numarasını alalalım. 
- Her birinin karşısına değerlerini yazalım. 
- Şimdi çarpanları bulmak için her bir karakterin bulunduğu pozisyonu 2 nin kuvveti olarak alalım ve karşısına yazalım. Dikkat edilmesi gereken nokta pozisyon olarak alınacak sayıların 0 dan başlaması gerektiğidir. 
- Her bir karakter için elde edilen çarpımları toplayalım ve 11 değeri ile modunu alalım. Mod bölme işleminde kalanı veren bir fonksiyondur. 

Örn:
3 mod 2 = 1 ==> 3 ün 2 ile bölümden kalan 1 dir.
5 mod 3 = 2 ==> 5 in 3 ile bölümünden kalan 2 dir.

Karakter
Posizyonu
Karakter
Karakter
Değerleri
Çarpan
Çarpım
0
A
10
2⁰ =
1
10
1
R
29
2¹ =
2
58
2
K
21
2² =
4
84
3
U
32
2³ =
8
256
4
8
8
2⁴ =
16
128
5
3
3
2⁵ =
32
96
6
0
0
2⁶ =
64
0
7
2
2
2⁷ =
128
256
8
9
9
2⁸ =
256
2304
9
4
4
2⁹ =
512
2048
Toplam
5240

5240 mod 11 = 4 ==> 5240 ın 11 ile bölümden kalan 4 tür ve 4 Kontrol Numaramız yani Check Digitimizdir.