enevlogiev

PINValidation

May 28th, 2015
327
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Text.RegularExpressions;
  3.  
  4. class PINValidation
  5. {
  6.     static void Main()
  7.     {
  8.         var name = Console.ReadLine();
  9.         var gender = Console.ReadLine();
  10.         var pin = Console.ReadLine();
  11.  
  12.         if (pin.Length == 10 &&
  13.             IsCorrectDate(pin) && IsCorrectGender(pin, gender) &&
  14.             IsCorrectChecksum(pin) && IsNameCorrect(name))
  15.         {
  16.             Console.WriteLine("{{\"name\":\"{0}\",\"gender\":\"{1}\",\"pin\":\"{2}\"}}", name, gender, pin);
  17.         }
  18.         else
  19.         {
  20.             Console.WriteLine("<h2>Incorrect data</h2>");
  21.         }
  22.     }
  23.  
  24.     private static bool IsCorrectDate(string pin)
  25.     {
  26.         var month = int.Parse(pin.Substring(2, 2));
  27.         var day = int.Parse(pin.Substring(4, 2));
  28.         var year = pin.Substring(0, 2);
  29.         if (month > 40)
  30.         {
  31.             month -= 40;
  32.             year = "20" + year;
  33.         }
  34.         else if (month > 20)
  35.         {
  36.             month -= 20;
  37.             year = "18" + year;
  38.         }
  39.         else
  40.         {
  41.             year = "19" + year;
  42.         }
  43.  
  44.         var dateString = year + "-" + month + "-" + day;
  45.         DateTime dt;
  46.  
  47.         return DateTime.TryParse(dateString, out dt);
  48.     }
  49.  
  50.     static bool IsCorrectGender(string pin, string gender)
  51.     {
  52.         var isIdFemale = (pin[8] - '0') % 2 == 1;
  53.         var isInputFemale = gender == "female";
  54.  
  55.         return isIdFemale == isInputFemale;
  56.     }
  57.  
  58.     static bool IsCorrectChecksum(string pin)
  59.     {
  60.         var totalSum = 0;
  61.         var checkSum = pin[9] - '0';
  62.         var numbers = new[] { 2, 4, 8, 5, 10, 9, 7, 3, 6 };
  63.  
  64.         for (var index = 0; index < numbers.Length; index++)
  65.         {
  66.             var currentDigit = pin[index] - '0';
  67.             totalSum += currentDigit * numbers[index];
  68.         }
  69.         var remainder = totalSum % 11;
  70.         if (remainder == 10)
  71.         {
  72.             remainder = 0;
  73.         }
  74.                
  75.         return remainder == checkSum;
  76.     }
  77.  
  78.     static bool IsNameCorrect(string name)
  79.     {
  80.         var nameRegex = new Regex(@"[A-Z][a-z]+\s+[A-Z][a-z]+");
  81.         var match = nameRegex.Match(name);
  82.  
  83.         return match.Success;
  84.     }
  85. }
RAW Paste Data