实现赋码仪命令
升级小板程序失败时停止
This commit is contained in:
60
elec/PSDGenerate.cpp
Normal file
60
elec/PSDGenerate.cpp
Normal file
@@ -0,0 +1,60 @@
|
||||
#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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user