>> ROB Bowden: Hi, saya Rob.
Dan saya berharap anda akan dikenakan caj untuk kredit.
Perkara itu kita perlu lakukan adalah meminta kad kredit yang
nombor dari pengguna.
Di sini, kita menggunakan getLongLong.
Anda boleh juga menggunakan getString, tetapi dalam kes itu, anda akan perlu menyemak
bahawa tidak ada bukan nombor watak-watak dalam string.
Oleh itu, kita akan menggunakan getLongLong.
>> Ingat bahawa anda tidak boleh menggunakan sesuatu seperti getInt, kerana bilangan akan
terlalu besar untuk dimuatkan di dalam integer.
Apabila kita mempunyai jumlah itu, kita lihat di sini gelung selama ini.
Jadi gelung selama ini sedang melaksanakan Algoritma Luhn yang anda
lihat dalam spec Serangga ini.
>> Dan ia sebenarnya akan untuk menjadi sedikit bijak.
Jadi dalam spec Serangga itu, notis yang Langkah Satu dan Dua adalah berasingan.
Kita mula-mula pergi ke kad kredit keseluruhan nombor, mencari setiap lain
watak bermula dari kedua untuk watak lepas, dan mendarabkan mereka
dan menambah semua digit.
Kemudian selepas itu, kami menambah di semua angka lain.
>> Jadi, daripada melakukan perkara-dalam dua langkah-langkah yang berasingan, kita akan menggabungkan
mereka ke dalam satu lelaran ke atas nombor kad kredit keseluruhan.
Di sini, kita melihat int setaraf kini angka nombor kad kredit, arena 10.
Apakah nombor kad kredit arena 10 lakukan?
Ia memberi kita digit terakhir secara keseluruhan nombor.
Jadi ingat bahawa jika kita membahagikan nombor sebanyak 10, maka bakinya
akan menjadi apa sahaja yang angka terakhir adalah.
23 dibahagikan dengan 10, selebihnya akan menjadi 3.
>> Jadi angka yang lalu, kini di sini, kita lihat kita bercabang pada lisan dengan 2.
Jadi apa yang kita akan menggunakan lisan oleh 2 untuk adalah membezakan antara
salah satu daripada "setiap nombor yang lain dari kedua digit "nombor.
Lisan oleh 2 akan bermula sebagai palsu, kerana angka yang terakhir tidak perlu
dipertimbangkan dari kedua untuk digit terakhir.
>> Demikian maka pada akhir ini untuk gelung, kami melihat bahawa kita akan mengubah ini
daripada palsu kepada benar.
Pada lelaran seterusnya untuk gelung, ia akan dianggap benar sehingga
akhirnya, apabila kita menukar dari benar palsu.
Kerana maka kita akan berada di ketiga untuk digit terakhir, yang bukan salah satu daripada
digit bahawa kita harus membiak dengan 2.
>> Jadi, jika kita berada pada salah satu daripada angka yang kita mahu untuk membiak dengan 2,
kita lihat kita menambah checksum kami.
Dan di sini, kami menggunakan pengendali pertigaan sekali
lagi agak bijak.
Jadi, jika kini angka adalah kurang daripada 5, maka kita hanya boleh lakukan kali kini angka 2.
Itu mudah.
Jika ia 1, maka kita mahu menambah 2.
Jika ia 2, kami ingin menambah 4.
Jika ia 4, kita mahu menambah 8.
>> Jadi apa yang istimewa tentang 5?
Nah, 5 kali 2 adalah 10.
Dan ingat dari spec Serangga yang kita mahu menambah digit bagi
kali nombor 2, dan bukan kali nombor 2 sendiri.
Jadi, jika nombor asal adalah 7, 7 kali 2 adalah 14.
Kami mahu menambah 1 ditambah 4 kepada bilangan, bukan 14.
>> Jadi di sini, jika nombor adalah 5 atau lebih besar, apa yang kita lakukan adalah kini angka
kali 2 tolak 9.
Dan jika anda berfikir tentang itu, 5 kali 2 adalah 10.
Dan jadi kita menambah 1, iaitu 10 tolak 9.
Dan 6 kali 2 ialah 12.
Jadi kita menambah 3, yang ialah 12 tolak 9.
Dan yang bekerja untuk semua nombor.
>> Jadi itulah yang kita sedang menambah untuk checksum kami.
Dan lagi ini adalah apa yang mengendalikan Langkah Dua daripada algoritma Luhn ini, yang hanya
menambah angka itu jika ia tidak berlaku untuk menjadi salah satu daripada setiap digit lain.
Jadi sebaik sahaja kami mempunyai itu, ini adalah menjaga menjejaki kedua-dua aksara pertama bagi
nombor kad kredit, dua yang pertama digit, kerana kita sedang akhirnya akan
mahu menggunakan yang turun di sini untuk mengesahkan, semua betul, Visa mempunyai untuk memulakan
dengan ini, dan keperluan American Express untuk memulakan dengan ini, dan sebagainya.
>> Akhir sekali, kami melakukan kad kredit bilangan sama kad kredit
bilangan dibahagikan dengan 10.
Mengapa kita berbuat demikian?
Nah, kita hanya ditangani digit terakhir.
Membahagi dengan 10 akan beralih seluruh nombor di atas.
Jadi sekarang apabila kita gelung kembali, kami akan mengendalikan
kedua untuk digit terakhir.
Kemudian apabila kita mencapai ini sekali lagi, kita akan untuk memotong kedua untuk bertahan
digit, belakang gelung, dan mengendalikan ketiga untuk bertahan angka, dan sebagainya, sehingga
jumlahnya mencapai 0, pada masa kita keluar daripada gelung sementara.
>> Kami juga mengesan kredit panjang nombor kad, kerana itulah
penting untuk membezakan sama ada ia nombor kad kredit yang sah.
Jadi sekarang, sebaik sahaja kami telah dikira checksum, kita boleh menentukan sama ada ia
adalah kad yang sah.
The checksum arena 10 adalah sebahagian algoritma Luhn ini.
Jika checksum arena 10 mengembalikan sesuatu bukan sifar, maka ini akan kembali benar,
di mana, bilangan mesti tidak sah.
>> Jika tidak, jika checksum arena 10 adalah 0, maka kita boleh terus.
Ini besar lagi jika mengatakan, jika yang pertama dua digit adalah sama dengan AMEX 1,
di mana di sini, kita lihat bahawa AMEX 1, seperti spec, adalah 34.
Dan kita juga akan dibandingkan untuk AMEX 2, iaitu 37.
Dan nombor kad kredit adalah panjang sama dengan jangkaan American Express
panjang kad, maka kita boleh mencetak American Express.
>> Kami akan melakukan perkara yang sama dengan Visa.
Yang pertama dua digit perlu lebih besar daripada atau sama dengan 40, atau kurang
daripada atau sama dengan 49.
Mereka mewakili kad Visa sah.
Dan panjang perlu sama dengan Visa Masa 1 atau Visa Length 2.
Dan sebagainya panjang mesti sama ada 13 atau 16 digit.
>> Dan akhirnya dengan MasterCard, ia sama dengan Visa, yang dua pertama
digit perlu berada dalam tertentu jarak, dan yang mesti panjang
betul-betul 16 digit.
Jadi, jika mana-mana kes-kes yang memegang, maka dalam kes pertama, kami akan mencetak AMEX.
Jika kes ini memegang, kami akan mencetak Visa.
Jika kes ini memegang, kita akan mencetak MasterCard.
>> Tetapi jika tiada yang memegang, walaupun jika checksum itu adalah sah,
kita masih mencetak tidak sah.
Kerana ia bukan salah satu orang-orang jenis kad.
Nama saya Rob, dan saya berharap anda dijumpai menarik kredit.