【C#】JANコード13桁タイプのチェックデジットを算出する関数

/// <summary>
/// JANコード13桁タイプのチェックディジットを算出する
/// </summary>
/// <param name="code">JANコード</param>
/// <returns></returns>
private int calcJAN13CheckDigit(string code)
{
    if (!Regex.IsMatch(code, @"^[0-9]{12,13}$"))
    {
        throw new Exception("対象のJANコードが数字12桁または数字13桁になっていません。");
    }

    //先頭12桁を取得
    var val = code.Substring(0, 12);

    //① 偶数桁合計を求める
    int gusuGokei = val.Where((c, index) =>
            index % 2 == 1).Select(c =>
                int.Parse(c.ToString())).Sum();
    //② 奇数桁合計を求める
    int kisuGokei = val.Where((c, index) =>
            index % 2 == 0).Select(c =>
                int.Parse(c.ToString())).Sum();
    //③ 『偶数桁合計×3+奇数桁合計』を算出する
    int gokei = gusuGokei * 3 + kisuGokei;
    //④ ③で算出した値の1の位を取得する
    int subVal = gokei % 10;
    //⑤ チェックデジットは『10から④で取得した値を引いた結果の1の位』
    int digit = (10 - subVal) % 10;

    return digit;
}