例如:
注册号874586027890006171287556958344
在此号码的基础上,怎么生成不同数字?且要怎么验证?
(小白,烦请各位大神教导~~~)
// 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等库函数(绝大多数的开发语言都集成有该库函数),最后输出时采用十进制数字方式即可。兼具简便轻量和鲁棒性