Modulo 11 untuk ISBN

Saat membaca atau memegang buku, pernahkah kalian meluangkan waktu untuk melirik bagian belakang buku, tepatnya pada International Standard Book Number atau disingkat ISBN. Nah pada bagian belakang buku, nomer ISBN ini tercetak pada Barcode.

Seperti gambar di atas, ISBN dari sebuah buku dengan 13 digit. Sebelum ini yang kita kenal adalah ISBN dengan 10 digit. Perubahan dari 10 ke 13 ini ditandai dengan ditambahnya digit 978 di bagian depan kode.

Tahukah kalian, algoritma untuk men-generate ISBN adalah menggunakan modulo 11.

Modulo 11 banyak sekali digunakan sebagai alat keamanan. Sebagai contoh, antara lain sebagai digit uji pada ISBN

Sebelum kita bahas lebih lanjut, kita kenali dulu yuk, arti masing – masing bagian dari ISBN yang terdiri dari 5 bagian.

1. Bagian pertama, ISBN 13 digit selalu diawali “978″
2. Bagian kedua menandakan Group Geografi atau Negara penerbit .

3. Bagian ketiga adalah identitas penerbit
4. Bagian keempat adalah kelompok judul buku.

5. Bagian kelima adalah Karakter Uji yang memvalidasi ISBN.

Pada contoh barcode di atas 0 adalah kode negara berbahasa Inggris (UK, US, Australia, NZ, Canada,South Africa, Zimbabwe) [Ireland, Puerto Rico, Swaziland]

Karakter penguji digunakan untuk mendeteksi kesalahan pada karakter ISBN atau kesalahan pada pergeseran angka-angkanya. Karakter uji ini didapat dengan melakukan perhitungan sebagai berikut:

Karakter uji = mod 11

Contoh menentukan karakter uji adalah sebagai berikut :

Sebagai contoh, kita gunakan contoh ISBN di atas. Gunakan mulai digit 4 dan digit ke-12 yaitu : 0-7334-2609

Jumlahkan = 0+14+9+12+20+12+42+0+81 = 290

Hitung 290 mod 11 = 4 (256 / 11 = 26 sisa 4)

Sisa 4 ini yang nanti akan menjadi karakter terakhir sebagai Karakter Uji, sehingga secara keseluruhan ISBN secara lengkap adalah 0-7334-2609-4

Jika karakter terakhir disertakan, maka hasil perhitungan modulo sama dengan 0.

Contoh :

Jika pada contoh diatas, kita lanjutkan perhitungan hingga karakter terakhir (digit ke-10), maka 290 + (10×4) = 330

330 mod 11 = 0

Berikut ini merupakan kode program sederhana memakai bahasa C++ untuk melakukan pengecekan terhadap suatu kode ISBN dengan memanfaatkan karakter uji:

Untuk menguji apakah kode ISBN yang dimasukan valid atau tidak kita tinggal melakukan pemeriksaan terhadap hasil perhitungan modulo 11 dari nilai total penjumlahan hasil perkalian indeks dengan digit kode ISBN. Apakah sama dengan karakter uji atau tidak.

Jika sama maka artinya kode ISBN valid. Atau dalam program diatas digunakan persamaan:

sum % 11 == (string[9]-48)

Dimana nilai string[9]-48 adalah digit terakhir dari kode ISBN.

Sebelum tiap karakter diperiksa terlebih dahulu dikurangkan dengan 48. Kenapa? Karena string[i] akan bernilai sama dengan kode ASCII. Untuk angka 0-9 kode ASCII berada diantara 48-57.

Dalam program ini terdapat satu fungsi yaitu inputISBN(). Fungsinya adalah untuk mendapatkan inputan kode ISBN dari pengguna. Inputan akan diperiksa apakah panjangnya sudah 10 digit atau belum. Fungsi ini yang pertama kali dijalankan saat program dieksekusi.

Blok program :

for(int i = 1; i <= strlen(string) – 1; i++)

{

tambah = tambah + (i * (nomorISBN[i-1] – 48));

}

akan menghitung nilai tiap digit kode (nomorISBN[i-1] – 48) dikalikan dengan nilai i kemudian dijumlahkan dengan nilai tambah.

Setelah diperoleh nilai tambah maka dilakukan pemeriksaan dengan menggunakan ekspresi sum % 11 == (string[9]-48).

Jika benar (menghasilkan nilai 1) maka akan ditampilkan string “Kode ISBN valid”, jika salah akan ditampilkan string “Kode ISBN tidak valid”.

Selamat Mencoba.

Referensi :

Buku Matematika Diskrit, Rinaldi Munir, Informatika, Bandung

Advertisements

Modulo 10 untuk Kartu Perbankan


Kalo pada postingan sebelumnya saya bercerita tentang modulo 11, maka kali ini saya akan bercerita tentang modulo 10. Sama sama berfungsi untuk men-generate karakter uji.

Saya yakin di dompet Anda setidaknya ada satu kartu perbankan, entah itu kartu akun bank ataupun kartu kredit. Tapi mungkin Anda tidak pernah memperhatikan 16 digit angka yang tertera di kartu bank Anda. Nah, pada postingan kali ini saya akan bercerita tentang deretan angka tersebut.

Tapi dengan postingan ini bukan berarti saya mengajari bagaimana men-generate nomor kartu kredit. Bukaaaan. Sama sekali bukan. Tujuan dari posting ini adalah semata-mata untuk menjelaskan matematika dan sains di belakang angka-angka yang hampir setiap hari kita gunakan. Nah, sudah semestinya kalau postingan dipandang murni dari sisi akademik.

Anantomi Kartu

Sebelum memahami bagaimana nomor kartu digenerate, alangkah lebih baiknya kalo kita mengetahui arti dari 16 digit nomor tersebut.

Enam digit pertama adalah identitas penerbit (lihat tabel berikut) :

Penerbit Kartu Nomor Panjang Nomor
Diner’s Club / Carte Blanche 300xxx-305xxx, 36xxxx, 38xxxx 14
American Express 34xxxx, 37xxxx 15
VISA 4xxxxx 13 – 16
MasterCard 51xxxx – 55xxxx 16
Discover 6011xx 16

Sembilan digit berikutnya adalah Nomor akun pemilik kartu.
Digit terakhir (ke-16) adalah karakter uji

Modulo 10 untuk mengecek

Dulu pada tahun 1954, Hans Luhn dari IBM mengenalkan suatu algoritma yang digunakan sebagai criteria validitas dari suatu angka. Hampir semua kartu kredit degenerate dengan criteria validitas yang dikenal juga sebagai Uji Luhn atau Uji Mod 10.

Nah uji Luhn adalah sebagai berikut :

Mulai dari digit paling kanan.
1. Setiap digit pada posisi ganjil dikalikan dengan 2
2. Jika hasil perkalian menghasilkan angka 2 digit, tambahkan kedua angka tersebut untuk mendapatkan angka tunggal.
3. Kemudian, gantilah angka yang terletak pada digit ganjil (angka asli) dengan angka baru yang dihasilkan. Untuk angka pada digit genap ditulis apa adanya.
4. Tambahkan semua digit baru. Jika total akhir habis dibagi 10, maka nomor kartu kredit valid, jika tidak, maka kartu tidak valid.

Lihat contoh kartu VISA berikut ini :

Modulo 10 untuk mengecek

Dulu pada tahun 1954, Hans Luhn dari IBM mengenalkan suatu algoritma yang digunakan sebagai criteria validitas dari suatu angka. Hampir semua kartu kredit degenerate dengan criteria validitas yang dikenal juga sebagai Uji Luhn atau Uji Mod 10.

Nah uji Luhn adalah sebagai berikut :

Mulai dari digit paling kanan.
Setiap digit pada posisi ganjil dikalikan dengan 2
Jika hasil perkalian menghasilkan angka 2 digit, tambahkan kedua angka tersebut untuk mendapatkan angka tunggal.
Kemudian, gantilah angka yang terletak pada digit ganjil (angka asli) dengan angka baru yang dihasilkan. Untuk angka pada digit genap ditulis apa adanya.
Tambahkan semua digit baru. Jika total akhir habis dibagi 10, maka nomor kartu kredit valid, jika tidak, maka kartu tidak valid.

Lihat contoh berikut ini :

Pada kasus di atas, hasil penjumlahan total adalah 61, yang artinya bilangan ini tidak habis dibagi 10. Jadi kartu kredit ini invalid.

Pada kasus ini, hanya ada satu karakter uji yang valid yaitu 7. Karena pemilihan angka 7 sebagai digit terakhir akan menyebabkan total penjumlahan menjadi 60 (habis dibagi 10). Jadi nomor kartu VISA di atas akan valid jika 4552 7204 1234 5677

Sekarang mari kita coba untuk MasterCard.

Sekali lagi dengan algoritma Luhn, kita buat table sebagai berikut :

Ternyata total penjumlahan adalah 65. Sehingga terlihat bahwa kartu di atas tidak valid.

Pada kasus ini, nomor kartu akan valid, jika karakter uji atau digit terakhir dari nomor kartu adalah 8 dimana total penjumlahan akan menjadi 70.

Jadi nomor kartu MasterCard di atas akan valid jika 5490 1234 5678 9128.

Sekarang kita sudah tahu apakah kartu yang kita punya valid atau tidak kan?

Selamat mencoba.

Aku Ingin – Sapardi Djoko Damono

Aku Ingin – Sapardi Djoko Damono

Aku ingin mencintaimu dengan sederhana:
Dengan kata yang tak sempat diucapkan
kayu kepada api yang menjadikannya abu

Aku ingin mencintaimu dengan sederhana:
dengan isyarat yang tak sempat disampaikan
awan kepada hujan yang menjadikannya tiada

Setengah dari 8

Suatu hari terjadi percakapan menarik antara murid dan gurunya.

Guru : Berapakah setengah dari 8 ?
Murid : Vertikal atau horisontal, bu?
Guru : Apa yang kamu maksud dengan Vertikal atau horisontal ?
Murid : Begini, bu. Kalo Vertikal maka hasilnya akan sama dengan 3, tetapi kalo horisontal hasilnya 0.
Guru : ???

%d bloggers like this: