tag_verify_time时间的比较


部分一:
typedef struct
{
    uint8_t year;
    uint8_t mon;
    uint8_t day;
    uint8_t hour;
    uint8_t min;
    uint8_t sec;
    uint8_t week;
}rtcTimeType;
在函数tag_verify_time中
变量:
 uint32_t DateInSys;
 rtcTimeType time;
方法:    
 rtc.read_time(&time);                                //即使是24也是‭00011000‬左移3位没事!
 DateInSys=(time.year<<24)|(time.mon<<16)|(time.day<<8)|(time.hour<<3)|((time.min/10)&0x07); 
                                                                   即使是6也是‭0110所以&00000111没事!
结构:
U32 【年】【月】【日】【混合时分】

这样就获得了一个变量!此时系统的时间。DateInSys它不是传统意义的时间戳。


部分二:
代码中是:
发卡开始时间:10 30 FC
发卡截止时间:99 08 27
协议中是:失效:小时-分钟-FF-年-月-日
其实代码中的名字不准确,它的意义是一个有效期:年99-月08-日27-时10-分30-待定FC
uint32_t DateInCard
DateInCard=(comm_bcd_to_bin(tag->stop[0])<<24)|(comm_bcd_to_bin(tag->stop[1])<<16)|(comm_bcd_to_bin(tag->stop[2])<<8);
DateInCard |=((comm_bcd_to_bin(tag->start[0])<<3)|((comm_bcd_to_bin(tag->start[1])/10)&0x07));
这样获得一个U32和前面系统时间比较!

卡片存储时间 = 63 08 1b 53 , 设备当前时间 =12 08 1b 6c
注意到:年不一样!!今天就是8月27是一样的,后面两位不计较。
推测:永久有效的话就是直接年写最大两位数99!!!!!
这就回答了为什么永久卡都是99 08开头的 等下个月就是99 09开头啦

猜你喜欢

转载自blog.csdn.net/weixin_42381351/article/details/82111357