首页 新闻 会员 周边

求一个ISO7064 MOD11,10 算法

0
悬赏园豆:10 [已解决问题] 解决于 2023-10-20 08:56

求一个ISO7064 MOD11,10 算法
基于c#实现

狼性法则的主页 狼性法则 | 初学一级 | 园豆:56
提问于:2023-08-18 09:28
< >
分享
最佳答案
0

private int Mod11_10(string str)
{
var n = str.Length;
var p = 10;
var j = 0;
while (j < n)
{
var a = int.Parse(str.Substring(j, 1));
p = p + a;
if (p > 10) p = p - 10;
p = p * 2;
if (p >= 11) p = p - 11;
j = j + 1;
}
p = 11 - p;
if (p == 10) p = p - 10;
return p;

    }
收获园豆:10
雪山浪子 | 初学一级 |园豆:37 | 2023-10-20 08:55
其他回答(2)
0

可以按照以下步骤进行:

  1. 创建一个名为Iso7064Mod1110的类。

  2. 在该类中,创建一个名为CalculateCheckDigit的静态方法,用于计算校验位。

  3. CalculateCheckDigit方法中,接收一个字符串参数,表示要计算校验位的数字。

  4. 在方法内部,首先将字符串转换为数字数组,确保只包含数字字符。

  5. 接下来,使用MOD 11,10算法计算校验位。算法的步骤如下:

    • 从右到左遍历数字数组,将每个数字与权重系数相乘。
    • 权重系数是从2开始的递增序列,循环使用。例如,对于长度为5的数字,权重系数为2、3、4、5、2。
    • 将每个乘积的结果相加。
    • 将总和除以11,取余数。
    • 如果余数为10,则校验位为"X";否则,校验位为余数的数字表示。
  6. 返回计算得到的校验位。

以下是实现ISO 7064 MOD 11,10算法的示例代码:

using System;

public class Iso7064Mod1110
{
    public static char CalculateCheckDigit(string input)
    {
        int[] digits = GetDigits(input);
        int sum = 0;
        int weight = 2;

        for (int i = digits.Length - 1; i >= 0; i--)
        {
            sum += digits[i] * weight;
            weight = (weight % 10) + 1;
        }

        int remainder = sum % 11;
        char checkDigit = remainder == 10 ? 'X' : char.Parse(remainder.ToString());

        return checkDigit;
    }

    private static int[] GetDigits(string input)
    {
        int[] digits = new int[input.Length];

        for (int i = 0; i < input.Length; i++)
        {
            if (!char.IsDigit(input[i]))
            {
                throw new ArgumentException("Input must contain only digits.");
            }

            digits[i] = int.Parse(input[i].ToString());
        }

        return digits;
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        string input = "12345";
        char checkDigit = Iso7064Mod1110.CalculateCheckDigit(input);
        Console.WriteLine($"Check Digit: {checkDigit}");
    }
}

在上述示例代码中,我们创建了一个Iso7064Mod1110类,其中包含了一个静态方法CalculateCheckDigit来计算校验位。GetDigits方法用于将输入字符串转换为数字数组。

Main方法中,我们使用示例输入字符串"12345"调用CalculateCheckDigit方法,并打印计算得到的校验位。

请注意,以上代码仅实现了ISO 7064 MOD 11,10算法的校验位计算部分。如果需要完整的校验和验证功能,还需要实现校验和验证的逻辑。

lanedm | 园豆:2378 (老鸟四级) | 2023-08-18 09:40

chagtp生成的吗?不对,12345的校验位是0,这个算出来的是6

支持(0) 反对(0) 狼性法则 | 园豆:56 (初学一级) | 2023-08-18 09:46

@狼性法则: 这个算法只是提供思路,具体的细节自己调试一下就好了,要不连界面按钮css样式也提供一下

支持(0) 反对(0) lanedm | 园豆:2378 (老鸟四级) | 2023-08-18 09:50

@lanedm: 。。。。。。。你这个我已经写过一遍了,算出来的跟工具生成的不一样,别图现成,搞个思路

支持(0) 反对(0) 狼性法则 | 园豆:56 (初学一级) | 2023-08-18 09:52
1
public class ISO7064MOD1110
{
    public static bool Validate(string number)
    {
        int checksum = 0;
        int factor = 2;

        for (int i = number.Length - 1; i >= 0; i--)
        {
            int digit = int.Parse(number[i].ToString());
            checksum += digit * factor;
            factor = (factor == 7) ? 2 : factor + 1;
        }

        int remainder = checksum % 11;
        int result = (remainder == 0) ? 1 : 11 - remainder;

        return result == 10;
    }
}
小小咸鱼YwY | 园豆:3210 (老鸟四级) | 2023-08-23 17:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册