public class PhoneClaimCodeProviderService { private Dictionary _phoneClaimCodes; private Dictionary _phoneClaimNumbers; public PhoneClaimCodeProviderService() { _phoneClaimCodes = new Dictionary(); _phoneClaimNumbers = new Dictionary(); } private static Random random = new Random(); private static string RandomString(int length) { const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; return new string(Enumerable.Repeat(chars, length) .Select(s => s[random.Next(s.Length)]).ToArray()); } public void GenerateClaimCodeForUserAndNumber(string username, string phoneNumber) { var generatedCode = string.Empty; if (IsCodeGeneratedForUser(username)) { generatedCode = _phoneClaimCodes[username]; } else { generatedCode = RandomString(6); _phoneClaimCodes[username] = generatedCode; _phoneClaimNumbers[username] = phoneNumber; } SignalIntegration.Instance.SendMessageToUserAsync("Your phone number validation code is: " + generatedCode, phoneNumber); } public string ValidateClaimCodeForUser(string code, string username) { var result = false; result = _phoneClaimCodes[username] == code; if (result) { _phoneClaimCodes.Remove(username); var number = _phoneClaimNumbers[username]; _phoneClaimNumbers.Remove(username); return number; } return string.Empty; } public bool IsCodeGeneratedForUser(string username) { return _phoneClaimCodes.ContainsKey(username); } }