Files
checker_host/elec/PSDGenerate.cpp

61 lines
1.3 KiB
C++
Raw Normal View History

#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;
}