Genarate One Time Password String

  1. public static string TOTPGenerator(string uniqueIdentity)  
  2. {  
  3.     string oneTimePassword = "";  
  4.     DateTime dateTime = DateTime.Now;  
  5.     string _strParsedReqNo = dateTime.Day.ToString();  
  6.     _strParsedReqNo = _strParsedReqNo + dateTime.Month.ToString();  
  7.     _strParsedReqNo = _strParsedReqNo + dateTime.Year.ToString();  
  8.     _strParsedReqNo = _strParsedReqNo + dateTime.Hour.ToString();  
  9.     _strParsedReqNo = _strParsedReqNo + dateTime.Minute.ToString();  
  10.     _strParsedReqNo = _strParsedReqNo + dateTime.Second.ToString();  
  11.     _strParsedReqNo = _strParsedReqNo + dateTime.Millisecond.ToString();  
  12.     _strParsedReqNo = _strParsedReqNo + uniqueCustomerIdentity;  
  13.     //Append above string with Policy number to get desired output.  
  14.     Console.WriteLine("TOTP value: " + _strParsedReqNo);  
  15.     using (MD5 md5 = MD5.Create())  
  16.     {  
  17.         //Get hash code of entered request id in byte format.  
  18.         byte[] _reqByte = md5.ComputeHash(Encoding.UTF8.GetBytes(_strParsedReqNo));  
  19.         //convert byte array to integer.  
  20.         int _parsedReqNo = BitConverter.ToInt32(_reqByte, 0);  
  21.         string _strParsedReqId = Math.Abs(_parsedReqNo).ToString();  
  22.         //Check if length of hash code is less than 9.  
  23.         //If so, then prepend multiple zeros upto the length becomes atleast 9 characters.  
  24.         if (_strParsedReqId.Length < 9)  
  25.         {  
  26.             StringBuilder sb = new StringBuilder(_strParsedReqId);  
  27.             for (int k = 0; k < (9 - _strParsedReqId.Length); k++)  
  28.             {  
  29.                 sb.Insert(0, '0');  
  30.             }  
  31.             _strParsedReqId = sb.ToString();  
  32.         }  
  33.             oneTimePassword = _strParsedReqId;  
  34.     }  
  35.     //Adding random letters to the OTP.  
  36.     StringBuilder builder = new StringBuilder();  
  37.     Random random = new Random();  
  38.     string randomString = "";  
  39.     for (int i = 0; i < 4; i++)  
  40.     {  
  41.         randomString += Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));  
  42.     }  
  43.     //Deciding number of characters in OTP.  
  44.     Random ran = new Random();  
  45.     int randomNumber = ran.Next(2, 5);  
  46.     Random num = new Random();  
  47.     //Form alphanumeric OTP and rearrange it reandomly.  
  48.     string otpString = randomString.Substring(0, randomNumber);  
  49.     otpString += oneTimePassword.Substring(0, 7 - randomNumber);  
  50.     oneTimePassword = new string(otpString.ToCharArray().OrderBy(s => (num.Next(2) % 2) == 0).ToArray());  
  51.     return oneTimePassword;  
  52. }