diff --git a/Core/Utils/HashUtil.cs b/Core/Utils/HashUtil.cs
new file mode 100644
index 00000000..b00a3e3f
--- /dev/null
+++ b/Core/Utils/HashUtil.cs
@@ -0,0 +1,90 @@
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Security.Cryptography;
+
+namespace Types.Utils;
+
+public static partial class HashUtil
+{
+ ///
+ /// Create a 24 character id using the sha256 algorithm + current timestamp
+ ///
+ /// 24 character hash
+ public static string Generate()
+ {
+ throw new NotImplementedException();
+ }
+
+ ///
+ /// is the passed in string a valid mongo id
+ ///
+ /// String to check
+ /// True when string is a valid mongo id
+ public static bool IsValidMongoId(string stringToCheck)
+ {
+ return MongoIdRegex().IsMatch(stringToCheck);
+ }
+
+ public static string GenerateMd5ForData(string data)
+ {
+ return GenerateHashForData(HashingAlgorithm.MD5, data);
+ }
+
+ public static string GenerateSha1ForData(string data)
+ {
+ return GenerateHashForData(HashingAlgorithm.SHA1, data);
+ }
+
+ public static string GenerateCrc32ForData(string data)
+ {
+ // TODO: Could not find a ms way of doing this.
+ // May need a custom impl to avoid an external lib. - CJ
+ throw new NotImplementedException();
+ }
+
+ ///
+ /// Create a hash for the data parameter
+ ///
+ /// algorithm to use to hash
+ /// data to be hashed
+ /// hash value
+ /// thrown if the provided algorithm is not implemented>
+ public static string GenerateHashForData(HashingAlgorithm algorithm, string data)
+ {
+ switch (algorithm)
+ {
+ case HashingAlgorithm.MD5:
+ var md5HashData = MD5.HashData(Encoding.UTF8.GetBytes(data));
+ return Convert.ToHexString(md5HashData).Replace("-", string.Empty);
+
+ case HashingAlgorithm.SHA1:
+ var sha1HashData = SHA1.HashData(Encoding.UTF8.GetBytes(data));
+ return Convert.ToHexString(sha1HashData).Replace("-", string.Empty);
+ }
+
+ throw new NotImplementedException("Provided hash algorithm is not supported.");
+ }
+
+ ///
+ /// Generates an account ID for a profile
+ ///
+ /// Generated account ID
+ public static int GenerateAccountId()
+ {
+ const int min = 1000000;
+ const int max = 1999999;
+
+ var random = new Random();
+
+ return random.Next() * (max - min + 1) + min;
+ }
+
+ [GeneratedRegex("^[a-fA-F0-9]{24}$", RegexOptions.IgnoreCase, "en")]
+ private static partial Regex MongoIdRegex();
+}
+
+public enum HashingAlgorithm
+{
+ MD5,
+ SHA1,
+}
\ No newline at end of file