Penjelasan · Dengan contoh terperinci

Cara kerja checksum

Nombor kad, IBAN, ID cukai dan alamat kripto semuanya mempunyai satu atau dua digit tambahan yang tersembunyi, dikira daripada digit lain. Salah taip satu karakter sahaja akan menyebabkan pengiraan tidak sepadan — inilah cara pengesah dapat mengenal pasti kesilapan taip dengan cepat, secara luar talian, tanpa perlu bertanya kepada bank atau rantaian blok.

Apakah itu checksum?

Checksum (atau digit semak) merupakan redundansi yang disengajakan. Apabila nombor dikeluarkan, satu atau lebih daripadanya tidak dipilih secara rawak: ia dikira daripada digit lain mengikut kaedah tertentu. Sesiapa yang mengetahui kaedah tersebut boleh mengira semula digit tersebut dan membandingkannya. Jika ia sepadan, nombor tersebut konsisten dari segi dalaman. Jika tidak, bermakna ada kesilapan taip, salah baca atau kerosakan.

Itulah sahaja yang dijanjikan oleh checksum. Ia tidak memberitahu sama ada akaun itu wujud, siapa pemiliknya atau apa yang tersimpan di dalamnya — perkara ini diulang oleh setiap pengesah di laman web ini kerana kedua-duanya sering disalah anggap.

Contoh terperinci 1 — Luhn, algoritma nombor kad.

Luhn digunakan oleh Visa, Mastercard dan kebanyakan kad pembayaran lain. Ambil contoh klasik 7992 7398 713. Mulakan dari digit paling kanan, gandakan setiap digit kedua; jika hasil penggandaan merupakan nombor dua digit, jumlahkan digit tersebut. Kemudian jumlahkan semua nilai.

DigitKedudukan dari kananDiganda?Dihitung sebagai
3Digit semak3
1Yang kedua dari kanan1 × 2 = 22
7Yang ketiga7
8Yang keempat8 × 2 = 16 → 1 + 67
9Yang kelima9
3Yang keenam3 × 2 = 66
7Yang ketujuh7
2Yang kelapan2 × 2 = 44
9Yang kesembilan9
9Yang kesepuluh9 × 2 = 18 → 1 + 89
7ke-117

Lajur di sebelah kanan berjumlah 3 + 2 + 7 + 7 + 9 + 6 + 7 + 4 + 9 + 9 + 7 = 70. Angka tujuh puluh boleh dibahagikan dengan sepuluh, jadi nombor tersebut sah. Ubah mana-mana digit tunggal dan jumlahnya tidak lagi menjadi gandaan sepuluh. Cuba pada Pengesah Kad Kredit — alat ini menjalankan pengiraan yang sama tepat pada peranti anda.

Contoh terperinci 2 — jumlah wajaran (ISBN-10)

Kebanyakan nombor kad pengenalan negara menggunakan jumlah wajaran: darabkan setiap digit dengan wajaran tetap, jumlahkan hasilnya dan semak baki pembahagian. ISBN-10 merupakan contoh yang paling jelas. Untuk 0-306-40615-2, wajaran tersebut bermula dari 10 hingga 1:

0×10 + 3×9 + 0×8 + 6×7 + 4×6 + 0×5 + 6×4 + 1×3 + 5×2 + 2×1 = 132

132 ialah tepat 11 × 12, jadi baki pembahagian modulo 11 ialah sifar dan ISBN tersebut sah. Nombor CPF di Brazil, PESEL di Poland serta berpuluh-puluh pengecam lain mengikut corak yang sama dengan wajaran dan modulus tersendiri — sebab itulah satu Pengesah ID Pukal dapat memeriksa ribuan nombor tersebut dalam masa sesaat.

Contoh terperinci 3 — IBAN dan mod 97

Nombor akaun bank antarabangsa menggunakan piawaian ISO 7064 mod 97-10, satu kaedah yang lebih kukuh dengan dua digit semak. Ambil contoh standard GB82 WEST 1234 5698 7654 32:

  1. Semak panjang nombor mengikut negara: IBAN UK mempunyai 22 karakter. ✓
  2. Alihkan empat karakter pertama ke hujung: WEST12345698765432GB82.
  3. Gantikan setiap huruf dengan dua digit (A = 10 … Z = 35): W→32, E→14, S→28, T→29, G→16, B→11, menghasilkan 3214282912345698765432161182.
  4. Bahagikan nombor tersebut dengan 97. Baki pembahagian mesti tepat 1 — dan memang begitulah keadaannya.

Oleh kerana 97 merupakan nombor perdana dan lebih besar daripada sebarang pertukaran dua digit, mod 97 dapat mengesan setiap ralat satu karakter dan setiap kesilapan susunan; hanya kira-kira satu rentetan rawak daripada 97 yang akan lulus secara kebetulan. Pengesah IBAN menunjukkan sama ada setiap lapisan ini lulus atau gagal.

Alamat kripto: checksum dibina daripada cincang.

Alamat Bitcoin dan Ethereum menetapkan standard yang lebih tinggi, kerana kesilapan taip akan menyebabkan wang dihantar ke alamat yang tidak wujud secara kekal. Alamat Bitcoin lama (1…, 3…) menggunakan Base58Check: muatan alamat diproses melalui SHA-256 sebanyak dua kali dan empat bait pertama hasilnya ditambah sebagai checksum. Satu karakter yang salah sahaja boleh mengubah cincang sepenuhnya, jadi peluang kesilapan taip terlepas adalah kira-kira satu dalam empat bilion. Alamat bc1… yang lebih baharu pula menggunakan Bech32 atau Bech32m, iaitu kod pembetulan ralat yang dapat mengesan sebarang kesilapan pada sehingga empat karakter. EIP-55 Ethereum pula menyembunyikan checksumnya dalam corak huruf besar dan kecil.

Alat Pengesah Alamat Bitcoin dan Pengesah Alamat Ethereum melaksanakan algoritma ini dalam pelayar web dan mengesahkan dirinya berdasarkan vektor ujian rasmi setiap kali halaman dimuatkan.

Gambaran ringkas mengenai skema

SkemaDigunakan olehDapat tangkapPeluang ralat rawak terlepas
Luhn (mod 10)Kad kredit & debit, IMEI, serta banyak kad pengenalan negaraSetiap kesilapan satu digit dan kebanyakan pertukaran digit bersebelahanKira-kira 1 dalam 10
ISO 7064 mod 97-10IBAN, beberapa nombor cukai dan syarikatSetiap ralat tunggal dan setiap pertukaran kedudukanKira-kira 1 daripada 97
Jumlah tertimbang, mod 10 atau 11ISBN-10, CPF Brazil, PESEL Poland dan banyak nombor pengenalan diri yang lainRalat tunggal dan kebanyakan pertukaran kedudukanKira-kira 1 daripada 10 atau 1 daripada 11
Base58Check (SHA-256 berganda, 4 bait)Alamat Bitcoin lama (1…, 3…)Sebarang kesilapan ejaan, dengan kebarangkalian yang sangat tinggiKira-kira 1 daripada 4 bilion
Bech32 / Bech32m (kod BCH)Alamat Bitcoin SegWit & Taproot (bc1…)Dijamin: sebarang ralat yang melibatkan sehingga 4 karakterKurang daripada 1 dalam satu bilion
EIP-55 (keccak-256 casing)Alamat EthereumRalat ejaan, disebabkan oleh corak huruf besar dan kecilSangat rendah untuk input huruf campuran

Mengapa pengesah perlu dijalankan pada peranti anda?

Semua yang dinyatakan di atas merupakan pengiraan aritmetik pada digit yang sudah ada. Tiada sebab untuk pengesah menghantar nombor kad, ID cukai atau alamat dompet ke pelayan — malah terdapat alasan yang sangat kukuh untuk tidak berbuat demikian. Setiap pengesah di laman web ini dijalankan secara setempat; senarai alat luar talian terdapat di sini, manakala panduan kami untuk memeriksa sama ada alat tersebut memuat naik data anda menunjukkan cara mengesahkan perkara ini untuk mana-mana laman web dalam masa dua puluh saat.

Soalan Lazim

Adakah checksum yang sah bermakna nombor tersebut benar-benar wujud atau aktif?

Tidak. Checksum hanya membuktikan bahawa digit-digit tersebut konsisten secara dalaman — iaitu nombor itu berkemungkinan wujud. Ia tidak dapat memberitahu anda sama ada akaun tersebut dibuka, siapa pemiliknya, atau apakah baki akaunnya. Setiap pengesah di laman web ini menyatakan perkara ini pada halaman masing-masing, kerana perbezaan ini penting.

Sejauh manakah kemungkinan nombor yang salah masih lulus?

Ia bergantung pada skema yang digunakan. Satu digit semak mod-10 membolehkan kira-kira 1 ralat rawak daripada 10 untuk lulus; mod 97 bagi IBAN membolehkan kira-kira 1 daripada 97 untuk lulus; checksum Base58Check bersaiz 4 bait membolehkan kira-kira 1 daripada 4 bilion untuk lulus. Ciri pentingnya ialah kesilapan manusia yang biasa — satu digit yang salah, dua digit yang bertukar tempat — dapat dikesan oleh semua skema ini.

Mengapa sesetengah pengecam tidak mempunyai checksum langsung?

Skema yang lebih lama atau lebih ringkas direka untuk dirujuk dalam pendaftaran dan bukannya untuk disemak secara luar talian, manakala beberapa sistem penomboran wujud sebelum amalan ini diperkenalkan. Bagi kes tersebut, pengesah hanya boleh memeriksa panjang dan format sahaja.

Adakah selamat untuk tampal nombor kad atau IC saya ke dalam pengesah?

Hanya jika proses pengesahan dijalankan pada peranti anda. Checksum merupakan pengiraan aritmetik pada digit yang sudah ada, jadi tiada sebab sah untuk pengesah menghantarnya ke pelayan. Anda boleh mengesahkan alat tersebut beroperasi secara setempat dengan ujian mod kapal terbang yang diterangkan dalam panduan kami untuk memeriksa sama ada alat tersebut memuat naik data anda.

Apakah perbezaan antara checksum, hash dan penyulitan?

Checksum merupakan digit semak yang pendek untuk mengesan kesilapan taip yang tidak disengajakan. Hash kriptografi pula merupakan cap jari yang panjang supaya sebarang perubahan yang disengajakan dapat dikesan dan data asal tidak dapat dipulihkan. Penyulitan menukar data supaya ia hanya boleh dibaca dengan kunci. Base58Check menggunakan hash untuk membina checksumnya, sebab itulah sukar untuk menipunya secara tidak sengaja.