Paano gumagana ang mga checksum
Ang mga numero ng card, IBAN, tax ID at crypto address ay lahat may nakatagong karagdagang digit o dalawa, na kinakalkula mula sa ibang mga digit. Kapag nagkamali ka ng isang karakter, hindi na magtutugma ang aritmetika — kaya naman agad na natutukoy ng validator ang maling pagta-type, offline, nang hindi na kinakailangang humingi ng tulong sa bangko o blockchain.
Ano ang checksum?
Ang checksum (o Digit ng pagsusuri) ay sinadyang idinagdag na redundansya. Kapag inisyu ang isang numero, ang isa o higit pang digit nito ay hindi pinipili nang random: kinakalkula ang mga ito mula sa natitirang digit gamit ang isang nakatakdang proseso. Sinumang nakakaalam ng prosesong iyon ay maaaring muling kalkulahin ang mga digit na iyon at ihambing. Kung magkatugma ang mga ito, ang numero ay may wastong panloob na konsistensya. Kung hindi, nagkaroon ng maling pagta-type, maling pagbasa o sira sa datos.
Iyan lang ang ipinapangako ng isang checksum. Wala itong sinasabi kung umiiral ba ang account, sino ang may-ari nito o ano ang laman nito — isang punto na paulit-ulit na binabanggit ng bawat validator sa site na ito, dahil madaling mapagkamalan ang dalawang iyon bilang iisa.
Halimbawang solusyon 1 — Luhn, ang algoritmo para sa numero ng card
Ginagamit ang Luhn ng Visa, Mastercard at karamihan sa ibang payment card. Gamitin ang klasikong halimbawa na 7992 7398 713. Magsimula sa pinakakanang digit, doblehin ang bawat pangalawang digit; kung ang resulta ng pagdoble ay dalawang digit, pagsama-samahin ang mga digit na iyon. Pagkatapos, pagsama-samahin ang lahat ng numero.
| Digit | Posisyon mula sa kanan | Nadoble ba? | Itinuturing na |
|---|---|---|---|
3 | Digit ng pagsusuri | — | 3 |
1 | Ikalawa mula sa kanan | 1 × 2 = 2 | 2 |
7 | Ikatlo | — | 7 |
8 | Ikaapat | 8 × 2 = 16 → 1 + 6 | 7 |
9 | Ikalima | — | 9 |
3 | Ikaanim | 3 × 2 = 6 | 6 |
7 | Ikapito | — | 7 |
2 | Ikawalo | 2 × 2 = 4 | 4 |
9 | Ikasiyam | — | 9 |
9 | Ikasampu | 9 × 2 = 18 → 1 + 8 | 9 |
7 | ika-11 | — | 7 |
Ang kolum sa kanan ay nagbibigay ng kabuuang 3 + 2 + 7 + 7 + 9 + 6 + 7 + 4 + 9 + 9 + 7 = 70. Ang pitumpu ay nahahati sa sampu, kaya balido ang numero. Kapag binago mo ang kahit isang digit, hindi na magiging multiple ng sampu ang kabuuan. Subukan mo ito sa Tagapatunayan ng Credit Card — isinasagawa nito ang eksaktong pagkalkula na ito sa iyong device.
Halimbawang solusyon 2 — isang weighted sum (ISBN-10)
Maraming pambansang numero ng ID ang gumagamit ng Timbang na kabuuan: i-multiply ang bawat digit sa isang nakatakdang weight, pagsama-samahin ang mga ito at suriin ang remainder. Ang ISBN-10 ang pinakamalinaw na halimbawa. Para sa 0-306-40615-2, ang mga weight ay mula 10 pababa hanggang 1:
0×10 + 3×9 + 0×8 + 6×7 + 4×6 + 0×5 + 6×4 + 1×3 + 5×2 + 2×1 = 132
Ang 132 ay eksaktong 11 × 12, kaya ang remainder modulo 11 ay zero at balido ang ISBN. Ang CPF ng Brazil, PESEL ng Poland at dose-dosenang iba pang identifier ay sumusunod sa parehong pattern na may kani-kaniyang weight at modulus — kaya kayang suriin ng isang Maramihang ID Validator ang libo-libong identifier na iyon sa loob ng isang segundo.
Halimbawang solusyon 3 — IBAN at mod 97
Ang mga internasyonal na numero ng bank account ay gumagamit ng ISO 7064 mod 97-10, isang mas matibay na sistema na may dalawang check digit. Tingnan ang karaniwang halimbawa na GB82 WEST 1234 5698 7654 32:
- Suriin ang haba ayon sa bansa: ang isang British IBAN ay may 22 karakter. ✓
- Ilipat ang unang apat na karakter sa dulo:
WEST12345698765432GB82. - Palitan ang bawat letra ng dalawang digit (A = 10 … Z = 35): W→32, E→14, S→28, T→29, G→16, B→11, na nagreresulta sa
3214282912345698765432161182. - Paghatiin ang numerong iyon sa 97. Ang remainder ay dapat eksaktong 1 — at ganoon nga.
Dahil ang 97 ay prime at mas malaki kaysa sa anumang two-digit swap, nahuhuli ng mod 97 ang bawat pagkakamali sa isang character at bawat transposition; halos isang random na string lang sa 97 ang makakapasa nang hindi sinasadya. Ipinapakita ng IBAN Validator kung aling layer ang pumapasa o nahuhulog.
Mga crypto address: ang mga checksum ay binuo mula sa mga hash.
Ang mga address ng Bitcoin at Ethereum ay mas mahigpit ang pamantayan, dahil ang maling pagta-type dito ay magdudulot ng permanenteng pagkawala ng pera. Ang mga legacy na address ng Bitcoin (1…, 3…) ay gumagamit ng Base58Check: ang payload ng address ay ipinapadaan sa SHA-256 nang dalawang beses at ang unang apat na byte ng resulta ay idinadagdag bilang checksum. Ang kahit isang maling karakter ay lubusang nagbabago sa hash, kaya ang tsansa na makalusot ang maling pagta-type ay halos isa sa apat na bilyon. Ang mga bagong address na bc1… ay gumagamit ng Bech32 o Bech32m, isang error-correcting code na tinitiyak na matutuklasan ang anumang pagkakamali na nakakaapekto sa hanggang apat na karakter. Itinatago ng EIP-55 ng Ethereum ang checksum nito sa pattern ng mga malalaki at maliliit na titik.
Ang Validator ng Bitcoin Address at Validator ng Ethereum Address ay nagpapatupad ng mga algorithm na ito sa browser at sinusuri ang sarili laban sa mga opisyal na test vector sa bawat pag-load ng pahina.
Mga scheme sa isang sulyap
| Scheme | Ginagamit ng | Nahuhuli | Tsansa na makalusot ang isang random na error |
|---|---|---|---|
| Luhn (mod 10) | Mga credit & debit card, IMEI, maraming pambansang ID | Lahat ng pagkakamali sa bawat digit at karamihan sa mga kalapit na pagpapalit ng posisyon | Halos 1 sa 10 |
| ISO 7064 mod 97-10 | IBAN, ilang numero sa buwis at kumpanya | Bawat maliit na pagkakamali at bawat pagpapalit ng posisyon | Humigit-kumulang 1 sa 97 |
| Pinagsama-samang timbang, mod 10 o 11 | ISBN-10, Brazil CPF, Poland PESEL at maraming ID | Mga nag-iisang pagkakamali at karamihan sa mga pagpapalit ng posisyon | Humigit-kumulang 1 sa 10 o 1 sa 11 |
| Base58Check (doble SHA-256, 4 bytes) | Mga lumang address ng Bitcoin (1…, 3…) | Anumang maling pagta-type, na may napakataas na probabilidad | Humigit-kumulang 1 sa 4 bilyon |
| Bech32 / Bech32m (BCH code) | Mga address ng Bitcoin SegWit & Taproot (bc1…) | Tinitiyak: anumang error na nakakaapekto sa hanggang 4 na karakter | Mas mababa sa 1 sa bilyon |
| EIP-55 (keccak-256 casing) | Mga address ng Ethereum | Mga pagkakamali sa pagta-type, dahil sa padron ng malalaki at maliliit na titik | Napakababa para sa input na may halo-halong kaso ng titik |
Bakit dapat tumakbo ang validator sa iyong device?
Ang lahat ng nabanggit sa itaas ay aritmetika sa mga digit na mayroon ka na. Walang dahilan para ipadala ng validator ang numero ng card, tax ID o wallet address sa server — at may napakahusay na dahilan para hindi ito gawin. Ang bawat validator sa site na ito ay tumatakbo nang lokal; pinag-uugnay sila ng listahan ng mga offline tool, at ipinapakita ng aming gabay sa pagsuri kung nag-uupload ng iyong data ang isang tool kung paano itong kumpirmahin para sa anumang site sa loob ng dalawampung segundo.
Mga Madalas Itanong
Nangangahulugan ba ng balidong checksum na ang numero ay totoo o aktibo?
Hindi. Ang checksum ay nagpapatunay lamang na ang mga digit ay magkakatugma sa loob — na maaaring umiral ang numero. Hindi nito masasabi sa iyo kung bukas ang account, sino ang may-ari nito, o ano ang balanse nito. Sinasabi ito ng bawat validator sa site na ito sa pahina, dahil mahalaga ang pagkakaibang iyon.
Gaano kalaki ang posibilidad na makalusot pa rin ang maling numero?
Depende ito sa iskema. Ang isang solong check digit na mod-10 ay nagpapahintulot ng halos 1 random na pagkakamali sa bawat 10; ang mod 97 ng IBAN ay nagpapahintulot ng halos 1 sa bawat 97; ang checksum na Base58Check na may 4 na byte ay nagpapahintulot ng halos 1 sa bawat 4 na bilyon. Ang mahalagang katangian nito ay nahuhuli ng lahat ng ito ang karaniwang pagkakamali ng tao — isang maling digit, dalawang pinagpalit na digit.
Bakit ang ilang identifier ay walang checksum sa lahat?
Ang mga mas lumang o mas simpleng iskema ay dinisenyo upang tingnan sa isang registry sa halip na suriin nang offline, at ang ilang sistema ng numerasyon ay mas nauna pa sa gawaing ito. Para sa mga iyon, ang validator ay maaaring suriin lamang ang haba at format.
Ligtas bang ipaste ang numero ng aking card o ID sa isang validator?
Tanging kung ang proseso ng validasyon ay isinasagawa sa iyong device. Ang checksum ay aritmetika sa mga digit na mayroon ka na, kaya walang lehitimong dahilan para ipadala ng validator ang mga ito sa isang server. Maaari mong kumpirmahin na ang tool ay tumatakbo nang lokal sa pamamagitan ng pagsubok gamit ang airplane mode na inilarawan sa aming gabay para malaman kung nag-uupload ng iyong data ang tool.
Ano ang pagkakaiba ng checksum, hash, at encryption?
Ang checksum ay isang maikling check digit na dinisenyo upang mahuli ang hindi sinasadyang mga pagkakamali sa pagta-type. Ang cryptographic hash ay isang mahabang fingerprint na dinisenyo upang matukoy kahit ang sinadyang pagbabago at hindi mabawi ang orihinal na datos. Ang encryption ay binabago ang datos upang mabasa lamang ito gamit ang isang key. Ginagamit ng Base58Check ang hash upang bumuo ng checksum nito, kaya napakahirap nitong malinlang nang hindi sinasadya.