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