在原数据(30位序列号)基础上,生成同类型但不相同的数据(30位序列号)

例如:
注册号874586027890006171287556958344
在此号码的基础上,怎么生成不同数字?且要怎么验证?
(小白,烦请各位大神教导~~~)

可将每个数字按照4位的二进制数转换,去掉前面为“0”的位数,
如:7变为二进制”0111“去掉前面的”0“为”111“,然后将全部30位数字进行转换二进制并连接,形成二进制字符串,
对二进制字符串安装设定的规则函数进行加”0“运算,不同函数加入0的部位不相同,形成新的二进制字符串。
最后,对新的二进制字符串进行没4位一组 恢复成一组十六进制数。可以看出,不同的函数将出现不同的数据组。
需要验证可进行逆运算。

<- 点这里的采纳

如果问题解决,请把 https://ask.csdn.net/questions/772326 https://ask.csdn.net/questions/772324 两个问题采纳下。

点我的回答左上角的采纳和向上的箭头即可。

// Q772326.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char keys[] = "7Da;w4v2=)"; //这里可以换成你自己的10位字符,这样你的算法就和人家不同了。

void calc(char * src, char * des)
{
    int i;
    for (i = 0; i < (int)strlen(src); i++)
    {
        int s = src[i] - '0';
        int d = 3 * s * keys[i % 10] * keys[(i+1) % 10] + 14 * s * keys[(i+2) % 10] + 6;
        des[i] = d % 10 + '0';
    }
    des[i] = '\0';
}

int main()
{
    char ch[31];
    char ch1[31];
    char ch2[31];
    int n;
    while (1)
    {
        printf("1 计算 2 验证 3 退出:");
        scanf("%d", &n);
        if (n == 1)
        {
            printf("请输入30位数字:\n");
            scanf("%s", ch);
            calc(ch, ch1);
            printf("结果:%s\n", ch1);
        }
        if (n == 2)
        {
            printf("请输入30位数字:\n");
            scanf("%s", ch);
            printf("请输入30位加密后的数字:\n");
            scanf("%s", ch1);
            calc(ch, ch2);
            if (strcmp(ch1, ch2) == 0)
            {
                printf("正确!\n");
            }
            else
            {
                printf("错误!\n");
            }
        }
        if (n == 3) break;
    }
    return 0;
}

图片说明