PAT-B: vérification d'identité 1031 (15 points)



1. Sujet

Un numéro d'identification légal est composé d'une zone à 17 chiffres, d'un numéro de date et d'un numéro de séquence plus un code de contrôle. Les règles de calcul du code de contrôle sont les suivantes:

Premièrement, les 17 premiers chiffres sont pondérés et additionnés, et la répartition des poids est: {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4, 2};
alors la somme calculée est modulo 11 pour obtenir la valeur Z; enfin, la valeur de Z et la valeur du code de contrôle M correspondent à la relation suivante:

Z : 0 1 2 3 4 5 6 7 8 9 10
M : 1 0 X 9 8 7 6 5 4 3 2

Format d'entrée:

Entrez la première ligne pour donner un entier positif N (≤100) est le nombre de numéros de carte d'identité saisis. Suivant N lignes, chaque ligne donne un numéro d'identification à 18 chiffres.

Format de sortie:

Sortie 1 numéro d'identification problématique par ligne dans l'ordre d'entrée. Il n'est pas vérifié si les 17 premiers chiffres sont raisonnables, mais seulement si les 17 premiers chiffres sont tous des nombres et le code de contrôle du dernier chiffre est calculé avec précision. Si tous les nombres sont normaux, Tout passé est sorti.

Exemple d'entrée 1:
4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X


Exemple de sortie 1: 12010X198901011234
110108196711301866
37070419881216001X

Exemple d'entrée 2:
2
320124198808240056
110108196711301862

Échantillon de sortie 2:
tous réussis


2. Idées et précautions

Idées:

  1. Définir un standard de fonction externe de type booléen (): vérifier si les 16 premiers chiffres de la carte d'identité sont des nombres
  2. Définissez la fonction externe getid () de type char: La fonction renvoie le code de contrôle correct correspondant au dernier chiffre de l'ID d'entrée.
  3. Testez en tapant. Vérifiez d'abord si la carte d'identité est standard, si elle n'est pas sortie directement; si c'est le cas, vérifiez si le dernier code de contrôle est correct.
  4. Utilisez la variable pass_count pour compter le nombre de cartes d'identité transmises.
  5. Notez qu'un tableau de caractères est utilisé pour stocker les informations d'identité, donc lors de la somme, arr [i] - '0'.

Les deux fonctions externes définies sont les suivantes:

(1) Vérifiez les 16 premiers chiffres de la carte d'identité

bool standard( char arr[] )
{
    
    
   	for(int i=0;i<17;i++)
   	{
    
    
	   	  if(0==isdigit(arr[i]))
		  {
    
    
			 	return false;
			    break;
		  }		
	}
	return true;
}

(2) Renvoyez le dernier code de contrôle de la carte d'identité


char getid(char arr[])   //获取最后一位校验码 
{
    
      
    char M[12]={
    
    '1','0','X','9','8','7','6','5','4','3','2'};
	int weight[18]={
    
    7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    int sum=0;
    int z=0;

    for(int i=0;i<17;i++)
    {
    
    
      sum=sum+(arr[i]-'0')*weight[i];         //arr[i]-'0'返回的才是货真价实的数字
	}
     		z=sum%11;
	char   temp=M[z];
	return temp;
}



Trois, code AC

#include<iostream>
#include<cstdio>
using namespace std;

bool standard( char arr[]);
char getid(char arr[]);

int main( )
{
    
    
	char arr[20];
	int pass_count=0;  //记录通过的次数 
	int N;
	cin>>N; 

	for(int i=0;i<N;i++)
	{
    
    	
		char temp[20];
		scanf("%s",&temp);         
		if(standard(temp)==true)  					  //检查前16为是否合法 
		{
    
       
		 	if(temp[17]==getid(temp))    //检查最后一位的校验码是否正确 
		 	{
    
    
		 		pass_count++;
			}
			else 
			{
    
        
				printf("%s\n",temp);
			}
		}
		else
		{
    
    
		printf("%s\n",temp);	
		}
	
		if(pass_count==N) printf("All passed\n");
    }
}


bool standard( char arr[] )
{
    
    
   	for(int i=0;i<17;i++)
   	{
    
    
	   	  if(0==isdigit(arr[i]))
		  {
    
    
			 	return false;
			    break;
		  }		
	}
	return true;
}

char getid(char arr[])   //获取最后一位校验码 
{
    
      
    char M[12]={
    
    '1','0','X','9','8','7','6','5','4','3','2'};
	int weight[18]={
    
    7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    int sum=0;
    int z=0;
    for(int i=0;i<17;i++)
    {
    
    
    	sum=sum+(arr[i]-'0')*weight[i];
	}
           z=sum%11;
	char   temp=M[z];
	return temp;
}


résultat:
Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/SKMIT/article/details/113917505
conseillé
Classement