使用 Optim Data Privacy 解决方案在开放平台上定制数据转换
2010-02-04 00:00:00 来源:WEB开发网取 S 对 11 的模 j,j = mod(S, 11)
根据 j 的值,得到校验码 Yj,Yj:1 0 X 9 8 7 6 5 4 3 2,j=0,1...10
转换部分的关键代码如下:
// 根据身份证最后四位生成随机数序列
seed=atoi(&ID[14]);
srand(seed);
// 分别获得随机生成的省号位置、出生年份和出生月份
pos[0]=rand()%31;
pos[1]=rand()%30+70;
pos[2]=rand()%12+1;
// 将数字转化为字符
itoa(pos[1],year,10);
itoa(pos[2],month,10);
// 替换省号
ID[0]=pro[2*pos[0]];
ID[1]=pro[2*pos[0]+1];
// 替换年份
ID[8]=year[0];
ID[9]=year[1];
// 替换月份
if(month[1]!='\0')
{
ID[10]=month[0];
ID[11]=month[1];
}
else
{
ID[10]='0';
ID[11]=month[0];
}
// 得到每一位身份证的整形值
for(i=0;i<17;i++)
data[i]=ID[i]-'0';
// 计算校验位
data[17]=0;
for(i=0;i<17;i++)
data[17]+=data[i]*wi[i];
// 校验位赋值
ID[17]=yi[data[17]%11];
最后,将变化完成的数据写到目标列中。代码如下:
( rc = (*pInputParms->pPSTPutColValue) // 目标列赋值函数
(PST_C_CHAR, // 目标列数据类型
0, //Precision,DECIMAL 数据类型专用,这里不需要
0, //Scale,DECIMAL 数据类型专用,这里不需要
ID, // 转换后的数据
sizeof(ID), // 数据大小
IndVar)); // 赋值是否为空,-1 为空,不空为 0
更多精彩
赞助商链接