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