ID番号とISBN番号の検証規則

2070 ワード

最近『コード』という本を読んで、モールスコードから盲文、ASCIIコード、そしてその設計原理まで、多くのコード方式について話しました.
特に、符号化において、検査ビットはデータの完全性を保証する重要な設計であり、身分証明書番号と図書のISBN番号の検査ビットをついでに勉強し、簡単なテストコードを書いた.
現在、私たちが使用している18ビットの身分証明書番号と13ビットのISBN番号は、彼らの最後の数字がチェックビットであり、身分証明書の最後のビットは0~10十数ある可能性があるが、チェックビットは1ビットしかないことを規定しているので、11の代わりに「X」を使うのは、ローマ数字の10の数符である.
認証方法:
#include<stdio.h>
#include<string.h>

const char *id = "34052419800101001X";

int weight[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; 
char map[11] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};

int main()
{
        int i, len;    
        int sum = 0;
        if (strlen(id) != 18) {
                printf("wrong length!
"); return -1; } for (i=0; i<17; i++) { sum += ( id[i] - '0' ) * weight[i]; } if (id[17] == map[sum % 11]) { printf("verify pass!
"); } else { printf("verify error!
"); return -1; } return 0; }

ISBN検証方法:
#include<stdio.h>
#include<string.h>

const char *isbn = "9787514605099";
int weight[12] = {1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3}; 

int main()
{
        int i, len;    
        int sum = 0;
        int code;
        if (strlen(isbn) != 13) {
                printf("wrong length!
"); return -1; } for (i=0; i<12; i++) { sum += (isbn[i] - '0') * weight[i]; } code = 10 - sum % 10; if (code == 10) { code = 0; } if (code == (isbn[12] - '0')) { printf("verify pass!
"); } else { printf("verify error!
"); return -1; } return 0; }