認証用ウィジェット


身分証明書(18ビット)は規則的で、勝手な18ビット数で条件を満たすことができるわけではありません.具体的な規則は関連規定を参考にすることができます.以下は身分証明書検証プログラムを提供します.
#include
#include

void validateIdNumber()
{
	int i, mod;
    int sum = 0;
	char ID[19]; //       
	int num[20]; //            

	int weight[17 ] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; //   
	int check[11] = {1,0,40,9,8,7,6,5,4,3,2}; //    
	
	printf("   18      :");
	scanf("%s", ID);

	if(strlen(ID) != 18)
	{
		printf("       18 ,    !
"); return; } if(ID[17] == 'x') ID[17] -= 'a' - 'A'; // 'X' for(i=0; i < 18; i++) { num[i] = ID[i] - '0'; } for(i = 0; i < 17; i++) { sum += num[i] * weight[i]; } mod = sum % 11; if(num[17] != check[mod]) { printf(" !
"); return; } printf(" !
"); printf(" :"); num[16] % 2 == 1 ? printf("
"):printf("
"); printf(" :%d%d%d%d %d%d %d%d
",num[6],num[7],num[8],num[9],num[10],num[11],num[12],num[13]); } int main() { validateIdNumber(); return 0; }