Files
checker_host/elec/PSDGenerate.cpp
ranchuan d1e617afd3 实现赋码仪命令
升级小板程序失败时停止
2023-12-21 18:51:58 +08:00

61 lines
1.3 KiB
C++

#include "PSDGenerate.h"
/********************************************************************************************************************
* 新版密码支持BCD码 *
********************************************************************************************************************/
uint64_t Scramble(uint64_t number, uint64_t max)
{
int i = 0;
// some random values
uint64_t scramblers[] = { 3, 5, 7, 31, 343, 2348, 89897 };
number += (max / 7) + 6;
number %= max;
// shuffle according to divisibility
for (i = 0; i < 7; i++)
{
if (scramblers[i] >= max / 3) break;
number = ((number * scramblers[i]) % max)
+ ((number * scramblers[i]) / max);
}
return number % max;
}
int GetPasswordByUidCode(const uint8_t *uidcode,uint8_t* psd)
{
uint64_t val = 0,val1 = 0;
int i= 0;
uint64_t ulBCDPsd = 0;
for(i=2;i<10;i++)
{
val *=10;
val += uidcode[i]-0x30;
}
val += uidcode[10];
for(i=11;i<16;i++)
{
val1 *=10;
val1 += uidcode[i]-0x30;
}
val = val + val1;
ulBCDPsd = Scramble(val, 0xFFFFFFFF);
psd[0] = (ulBCDPsd&0xFF000000)>>24;
psd[1] = (ulBCDPsd&0x00FF0000)>>16;
psd[2] = (ulBCDPsd&0x0000FF00)>>8;
psd[3] = ulBCDPsd&0x000000FF;
return 0;
}