Jak validovat český bankovní účet v C#?

Nedávno jsem zjistil, že číslo českého bankovního účtu musí splňovat kontrolní součet definovaný ČNB.

Nenašel jsem na internetu žádný kód v C# tak jsem se rozhodl napsat svůj vlastní ve formě extension metody.

public static class StringExtensions
{
    private static Regex CzBankAccountRegex = new Regex(@"((\d{0,6})-)?(\d{1,10})/(\d{4})");
    public static bool IsValidCzBankAccount(this string bankAccountInput)
    {
        if (bankAccountInput == null)
            return false;

        Match match = CzBankAccountRegex.Match(bankAccountInput);
        
        if (!match.Success)
            return false;

        string acc1 = match.Groups[2].Value;
        string acc2 = match.Groups[3].Value;
        string bankCode = match.Groups[4].Value;

        if (string.IsNullOrEmpty(acc1))
            return CzBankAccountControlSum(acc2) && CzBankCodes.Contains(bankCode);

        return CzBankAccountControlSum(acc1) 
            && CzBankAccountControlSum(acc2)
            && CzBankCodes.Contains(bankCode);
    }

    private static readonly int[] CzBankAccountWeights = new int[] { 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };
    private static bool CzBankAccountControlSum(string accountNumberStr)
    {
        string padded = accountNumberStr.PadLeft(10, '0');
        int sum = 0;
        for (int i = 0; i < padded.Length; i++)
            sum += int.Parse(padded[i].ToString()) * CzBankAccountWeights[i];

        return sum % 11 == 0;
    }

    private static readonly HashSet<string> CzBankCodes = new HashSet<string>()
    {
        "0100", "0300","0600","0710","0800","2010","2060","2070","2100","2200",
        "2220","2250","2260","2275","2600","2700","3030","3050","3060","3500",
        "4000","4300","5500","5800","6000","6100","6200","6210","6300","6700",
        "6800","7910","7950","7960","7970","7990","8030","8040","8060","8090",
        "8150","8190","8198","8199","8200","8220","8230","8240","8250","8255",
        "8265","8270","8280","8293","8299","8500"
    };
}