2009-09-11 3 views
1

Est-ce que quelqu'un sait comment résoudre cet Algorithme C# Math?Est-ce que quelqu'un sait comment résoudre cet algorithme Math C#?

Le nombre de contrôle calcule en multipliant chaque nombre dans un "numéro de sécurité sociale" avec changer 2 et 1 (en commençant par 2). Ensuite, il calcule et ajoute ensemble.

Le numéro de contrôle doit être divisé par 10 pour être correct et réussir.

Ex, 720310-1212 "Numéro de sécurité sociale"

 
7* 2 = 14 --> 1+4 

2* 1 = 2 --> 2 

0* 2 = 0 --> 0 

3* 1 = 3 --> 3 

1* 2 = 2 --> 2 

0* 1 = 0 --> 0 

1* 2 = 2 --> 2 

2* 1 = 2 --> 2 

1* 2 = 1 --> 2 

2* 1 = 2 --> 2 

Ajoutez ensuite les 1 + 4 + 2 + 0 + 3 + 2 + 0 + 2 + 2 + 2 + 2 = 20

20/10 = 2 Pass!

+0

On dirait que vous vouliez valider le "personnummer" suédois? –

Répondre

11

Vous devez:

  • un compteur pour accumuler les chiffres,
  • une boucle pour itérer sur la chaîne d'entrée,
  • char.GetNumericValue pour obtenir la valeur numérique de chaque caractère d'entrée,
  • une drapeau booléen qui est changé chaque itération pour indiquer s'il faut multiplier par 1 ou 2,
  • l'opérateur de module % pour calculer le reste de la division de 10 à l'en ré.

Devrait être assez simple. Devoirs?


Modifier

solution LINQ:

var valid = "720310-1212" 
    .Where(c => char.IsDigit(c)) 
    .Select(c => (int)char.GetNumericValue(c)) 
    .Select((x, i) => x * (2 - i % 2)) 
    .Select(x => x % 10 + x/10) 
    .Sum() % 10 == 0; 
+0

+1 pour les devoirs? –

+0

LOL! On dirait des devoirs pour moi. – Rap

+2

Ce peut être des devoirs, mais pas nécessairement; les exemples donnés ressemblent à la contrepartie suédoise d'un numéro de sécurité sociale, et ils sont fréquemment utilisés par diverses autorités et organisations comme une sorte de "numéro de client", c'est donc un cas assez courant que vous souhaitez valider (ce qui est fait selon l'algorithme décrit). Il semble qu'il y ait une référence d'âge étudiant dans le pseudo de l'OP ... –

Questions connexes