Check below code may be this will help you.
public static string TOTPGenerator(string uniqueIdentity)
{
string oneTimePassword = "";
DateTime dateTime = DateTime.Now;
string _strParsedReqNo = dateTime.Day.ToString();
_strParsedReqNo = _strParsedReqNo + dateTime.Month.ToString();
_strParsedReqNo = _strParsedReqNo + dateTime.Year.ToString();
_strParsedReqNo = _strParsedReqNo + dateTime.Hour.ToString();
_strParsedReqNo = _strParsedReqNo + dateTime.Minute.ToString();
_strParsedReqNo = _strParsedReqNo + dateTime.Second.ToString();
_strParsedReqNo = _strParsedReqNo + dateTime.Millisecond.ToString();
_strParsedReqNo = _strParsedReqNo + uniqueCustomerIdentity;
Console.WriteLine("TOTP value: " + _strParsedReqNo);
using (MD5 md5 = MD5.Create())
{
byte[] _reqByte = md5.ComputeHash(Encoding.UTF8.GetBytes(_strParsedReqNo));
int _parsedReqNo = BitConverter.ToInt32(_reqByte, 0);
string _strParsedReqId = Math.Abs(_parsedReqNo).ToString();
if (_strParsedReqId.Length < 9)
{
StringBuilder sb = new StringBuilder(_strParsedReqId);
for (int k = 0; k < (9 - _strParsedReqId.Length); k++)
{
sb.Insert(0, '0');
}
_strParsedReqId = sb.ToString();
}
oneTimePassword = _strParsedReqId;
}
StringBuilder builder = new StringBuilder();
Random random = new Random();
string randomString = "";
for (int i = 0; i < 4; i++)
{
randomString += Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
}
Random ran = new Random();
int randomNumber = ran.Next(2, 5);
Random num = new Random();
string otpString = randomString.Substring(0, randomNumber);
otpString += oneTimePassword.Substring(0, 7 - randomNumber);
oneTimePassword = new string(otpString.ToCharArray().OrderBy(s => (num.Next(2) % 2) == 0).ToArray());
return oneTimePassword;
}