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

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

<- 点这里的采纳

如果问题解决,请把 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;
}

图片说明


直接调用Hash或者MD5等库函数(绝大多数的开发语言都集成有该库函数),最后输出时采用十进制数字方式即可。兼具简便轻量和鲁棒性