Skip to content

凭证期限

本文档定义凭证的有效期和使用限制规范。

概述

凭证的使用受以下条件限制:

限制类型说明
时间范围凭证的生效和失效时间
周期限制每周特定日期和时段
次数限制最大使用次数

有效期

结构体:ValidityPeriod

时间维度的有效期定义。

protobuf
message ValidityPeriod {
  uint64 valid_from = 1;        // 生效时间(UNIX毫秒时间戳,0=立即生效)
  uint64 valid_until = 2;       // 失效时间(UNIX毫秒时间戳,0=永久有效)
  Schedule schedule = 3;        // 周期性时间表
}
字段类型说明
valid_fromuint64生效时间,0 表示立即生效
valid_untiluint64失效时间,0 表示永久有效
scheduleSchedule周期性时间表,用于限制每周/每天的生效时段

周期时间表

结构体:Schedule

周期性时间表,用于限制凭证在每周特定时段内生效。

protobuf
message Schedule {
  uint32 week_days = 1;         // 生效的星期(位掩码)
  uint32 start_minutes = 2;     // 每日开始时间(从0点起的分钟数)
  uint32 end_minutes = 3;       // 每日结束时间(从0点起的分钟数)
}
字段类型说明
week_daysuint32位掩码,bit0=周日,bit1=周一,...,bit6=周六
start_minutesuint32每日开始时间,0-1439(0:00-23:59)
end_minutesuint32每日结束时间,0-1439(0:00-23:59)

星期位掩码

字段名:week_days

星期
周日bit01
周一bit12
周二bit24
周三bit38
周四bit416
周五bit532
周六bit664

常用组合

场景week_days说明
每天0不限制星期
每周一2仅周一
工作日62周一至周五
周末65周六周日

次数限制

次数限制定义在 Credential 结构中:

字段类型说明
use_count_limituint32使用次数限制,0 表示不限
use_countuint32已使用次数

use_count >= use_count_limit(且 use_count_limit > 0)时,凭证失效。

有效性判断

凭证在某时刻可用,需同时满足以下条件:

  1. 时间范围valid_from <= 当前时间 <= valid_until(0 值表示无限制)
  2. 周期限制:若设置了 schedule,当前时刻需在允许的星期和时段内
  3. 次数限制use_count < use_count_limit(若 use_count_limit > 0
可用 = 在时间范围内
     AND (无周期限制 OR 在周期时段内)
     AND (无次数限制 OR 未达上限)

示例

永久有效

json
{
  "validity": {
    "valid_from": 0,
    "valid_until": 0
  },
  "use_count_limit": 0
}

固定时间段

2025年1月1日至2025年12月31日:

json
{
  "validity": {
    "valid_from": 1735689600000,
    "valid_until": 1767225599000
  }
}

工作日限时

工作日 9:00-18:00:

json
{
  "validity": {
    "valid_from": 0,
    "valid_until": 0,
    "schedule": {
      "week_days": 62,
      "start_minutes": 540,
      "end_minutes": 1080
    }
  }
}

一次性密码

仅可使用 1 次:

json
{
  "validity": {
    "valid_from": 0,
    "valid_until": 0
  },
  "use_count_limit": 1
}

组合限制

2025年内,仅周末 10:00-22:00 有效,最多使用 10 次:

json
{
  "validity": {
    "valid_from": 1735689600000,
    "valid_until": 1767225599000,
    "schedule": {
      "week_days": 65,
      "start_minutes": 600,
      "end_minutes": 1320
    }
  },
  "use_count_limit": 10
}

物联网设备通信协议文档