Saturday 16 May 2020

Generate OTP with time interval CSharp (with /without Database)


Without Database:-

Generate OPT  :-

        Random random = new Random();       
        byte[] time = BitConverter.GetBytes(DateTime.Now.ToBinary());       
        byte[] key = BitConverter.GetBytes(random.Next());

        string token = Convert.ToBase64String(time.Concat(key).ToArray());

For Checking OTP Expired or NOT:-

       byte[] data = Convert.FromBase64String(OTP Entered by User);
        DateTime when = DateTime.FromBinary(BitConverter.ToInt64(data, 0));
        if (when < DateTime.Now.AddSeconds(-50)) ///Here you can define the OTP interval
            lblDecOTP.Text = "OTP is expired....";
        else

            lblDecOTP.Text = "OTP is active....";




With Database:-

Insert OTP IN Database:-

public void InsertOTPinDB()    {
Random rnd = new Random();
randomNumber = (rnd.Next(100000, 999999)).ToString();

        string query = "INSERT INTO OTPhistroytbl (id,Customer_No,User_Id,OTP,ctime_Stamp,status) VALUES (@id,@Customer_No,@User_Id,@OTP,@ctime_Stamp,@status) ";        cmd = new SqlCommand(query, con);        con.Open();        cmd.Parameters.AddWithValue("@id", 2);        cmd.Parameters.AddWithValue("@Customer_No", Cust_No.ToString());        cmd.Parameters.AddWithValue("@User_Id", Uname);        cmd.Parameters.AddWithValue("@OTP", randomNumber);        cmd.Parameters.AddWithValue("@ctime_Stamp", System.DateTime.Now.ToString());        cmd.Parameters.AddWithValue("@status", "1");        cmd.ExecuteNonQuery();        con.Close();    }

Verfiry OTP:-

protected void ValidateOTP_Click(object sender, EventArgs e)
    {
        lblMsg.Visible = true;
        adp = new SqlDataAdapter("SELECT ctime_Stamp FROM OTPhistroytbl WHERE OTP='" + txtOTP.Text + "'", con);
        adp.Fill(dt);
        DateTime OtpCrtDate = Convert.ToDateTime(dt.Rows[0][0].ToString());

        if (txtOTP.Text != randomNumber)
        {
            TimeSpan timeSub = DateTime.Now - OtpCrtDate;
            if (timeSub.TotalMinutes < 300)
            {
                cmd = new SqlCommand("update OTPhistroytbl set status='0' where OTP='" + txtOTP.Text + "'", con);
                con.Open();
                cmd.ExecuteNonQuery();
                lblMsg.Text = "logined successfully";
                con.Close();
            }
            else           
                lblMsg.Text = "Sorry but your OTP is very old. Get a new one";           
        }
        else       
            lblMsg.Text = "Sorry, Your OTP is Invalid. Try again, please.";       
    }