
ICS 01.040.35
CCS L 70 35
福
建 省 地 方 标 准
DB35/T 2223—2024
建设工程招投标可验证随机抽取数学模型
应用要求
Application requirements of verifiable random selection mathematical model in
construction engineering bidding
2024 - 10 - 21 发布
2025 - 01 - 21 实施
福建省市场监督管理局 发 布
DB35/T 2223—2024
目
次
前言 ................................................................................. II
1 范围 ............................................................................... 1
2 规范性引用文件 ..................................................................... 1
3 术语和定义 ......................................................................... 1
4 缩略语 ............................................................................. 2
5 总体要求 ........................................................................... 2
6 随机抽取流程 ....................................................................... 2
7 模型构建 ........................................................................... 4
8 随机抽取程序要求 ................................................................... 6
9 验证程序要求 ....................................................................... 6
附录 A(资料性) 应用示例 ............................................................. 8
参考文献 ............................................................................. 15
I
DB35/T 2223—2024
前
言
本文件按照GB/T 1.1—2020《标准化工作导则 第1部分:标准化文件的结构和起草规则》的规定
起草。
请注意本文件的某些内容可能涉及专利。本文件的发布机构不承担识别专利的责任。
本文件由厦门市公共资源交易中心提出。
本文件由福建省信息化标准化技术委员会(SAFJ/TC 11)归口。
本文件起草单位:厦门市公共资源交易中心、福建省经济信息中心、福建省公共资源交易公共服务
平台有限公司、福建省标准化研究院、福建元素信息科技有限公司、福建首众信息科技有限公司。
本文件主要起草人:林宗昭、许志雄、林平、李志锴、黄志忠、郑楚飞、周顺骥、吴阳、邱培善、
陈纯纯、蔡伟文、林荔晶、江峰、张传稀、陈洪。
II
DB35/T 2223—2024
建设工程招投标可验证随机抽取数学模型应用要求
1 范围
本文件规定了建设工程招投标过程中采用可验证随机抽取数学模型的总体要求、随机抽取流程、模
型构建、随机抽取程序要求和验证程序要求。
本文件适用于建设工程招投标过程中采用随机抽取方式确定入围投标人等应用场景。
2 规范性引用文件
本文件没有规范性引用文件。
3 术语和定义
下列术语和定义适用于本文件。
3.1
公共资源交易 public resource trading
工程建设项目、土地使用权、矿业权、国有产权、政府采购、医疗药品及其他公共资源的交易活动。
[来源:DB35/T 2167—2024,3.1]
3.2
公共资源交易电子交易平台 onIine public resource trading platform
以数据电文形式完成公共资源电子交易活动的信息平台。
注: 简称电子交易平台。
[来源:DB35/T 2167—2024,3.3]
3.3
公共资源交易平台运行服务机构 operation service organization of public resources trading
由政府设立或政府通过购买服务等方式确定,通过资源整合共享方式,为公共资源交易相关市场主
体、社会公众、行政监督管理部门等提供公共服务的单位。
注: 简称“平台运行服务机构”,即公共资源交易中心。
[来源:《公共资源交易平台服务标准(试行)》,3.3]
3.4
随机种子 random seed
在随机数生成过程中使用的、作为随机抽取算法起点的初始值。
3.5
随机抽取程序 random drawing program
一种基于数学模型和算法,通过计算机自动执行随机抽取操作的计算机程序。
3.6
可验证 verifiable
随机抽取数学模型的应用结果能够通过预设的验证程序进行重现和验证。
1
DB35/T 2223—2024
4 缩略语
下列缩略语适用于本文件。
HASH:散列函数(Hash Function)
JSON:一种轻量级的数据交换格式(Java Script Object Notation)
XML:可扩展标记语言(Extensible Markup Language)
5 总体要求
总体要求如下:
—— 数学模型及随机抽取程序应融入电子交易平台,实现抽取过程的全流程电子化;
—— 应提供必要的工具和接口,支持审计机构或监管部门对应用过程进行审计和评估;
—— 随机抽取过程的关键步骤和参数应完整记录,并可通过验证程序验证随机抽取结果;
—— 随机抽取过程涉及的重要数据在存储、传输和处理过程应完整和可信。
6 随机抽取流程
随机抽取流程为从确定参与随机抽取的投标人清单到公布结果及验证的全过程,见图1;主要步骤
如下:
—— 招标人或其委托的招标代理机构应根据招标文件的要求确定参与随机抽取的投标人清单和需
要随机抽取入围的投标人数量;
—— 根据“随机种子生成模型”“随机编号生成模型”和“随机抽取结果生成模型”执行随机抽
取,生成随机抽取结果并公布;
—— 招标人或其委托的招标代理机构应通过电子交易平台导出与随机种子组成相关的数据,并当
场使用验证程序对随机抽取结果进行验证;
—— 如果验证结果出现不一致的情况,则应废除之前得出的随机抽取结果,暂停当前交易活动并
在问题排查完成后,再次组织重新抽取及验证。
2
DB35/T 2223—2024
图1 随机抽取流程图
3
DB35/T 2223—2024
7 模型构建
7.1
随机种子生成模型
随机种子生成模型以解密成功的电子投标文件受理时间(以服务器上记录时间为准,并将其转换成
距离投标当日0时0分0秒的秒数)的平均数四舍五入取整后的整数为基础,在末尾加上参与本次招标的
解密成功的投标人数(用4位整数表示),计算生成随机种子。示例见附录A的A.1。
随机种子的生成应具有不可预见性、可验证性。用于随机种子计算的相关参数应在随机抽取时立即
公开,并随着招标项目的档案资料进行归档存储,确保项目审计时可从档案材料中获取到相关参数并再
次计算出随机种子进行核对。
注: 随机种子由开标解密成功的投标人数量及其电子投标文件受理时间两种客观因素计算产生,在开标解密完成前
无法确定。随机种子生成的计算参数可替代,但在更改时要重新评估随机种子使用前的不可预见性和使用后的
可验证性。更改后的算法要经过严格的测试和验证并公开。
7.2
随机编号生成模型
随机编号生成模型将待抽取的投标人总数假设为n,按某种自然顺序排列后的序号为:1、2、…、
n-1、n。在使用随机方式从这n个投标人中产生一定数量入围评审的投标人前,应使用随机编号生成模
型对这n个投标人重新排序,为每位投标人分配一个新的随机编号,确保每个抽取对象均可参与抽取过
程。模型算法见表1和表2,示例见附录A的A.2。
表1 随机编号生成模型的参数说明
序号 参数 说明
1 a 1) 模型参数,可使用常数:16807
2 M 模型参数,可使用常数:2^31-1。
3 n 待抽取的投标人总数
4 x0 正整数,生成投标人随机序号的随机种子
1)以上 a 和 M 应为互质的正整数,且 M 应足够大。a 和 M 可替代,但在更改 a 和 M 的值时,应重新评估算法的随机 性、可预测性。更改后的算法应经过严格的测试和验证并公开。
表2 随机编号生成模型的算法
步骤 主要内容
计算方法 x ← x0 # 赋初始值为随机种子 for k=1,2,…,n x ← (a*x) mod M # a乘以x,再对M取余数,生成新的随机数 x ← (a*x) mod M I[1] ← floor(x*n/M + 1) # floor为向下取整函数 k ← 1 while(k < n) { x ← (a*x) mod M
4
DB35/T 2223—2024
表 2 随机编号生成模型的算法(续)
步骤 主要内容
计算方法 I[0] ← floor(x*n/M+1) # floor为向下取整函数 # 检查I[0]是否已存在于结果数组I中 if(all(I[1:k]-I[0]!= 0)) # 如果I[0]不在数组I的前k个元素中 { k ← k+1 I[k]← I[0] # 将 I[0] 添加到结果数组I中 } }
输出结果 I1,I2,…,In # 分配给n个投标人的随机序号(按投标人的自然顺序排列)
7.3
随机抽取结果生成模型
在随机编号生成后,n个待抽取的投标人均获得了新的序号。随机结果生成模型将需要抽取入围的
投标人数量假设为m(m小于等于n),运用随机方式从n个投标人中抽选m个投标人作为入围投标人抽取
结果,保证每个编号在抽取过程中被选中的概率均等。模型算法见表3和表4,示例见附录A的A.3。
表3 随机抽取结果生成模型的参数说明
序号 参数 说明
1 a 2) 模型参数,可使用常数:69069
2 M 模型参数,可使用常数:2^32-5
3 n 待抽取的投标人总数
4 m 需要抽取入围的投标人数量
5 x0 正整数,生成入围投标人的随机种子
2)以上 a 和 M 应为互质的正整数,且 M 应足够大。a 和 M 可替代,但在更改 a 和 M 的值时,应重新评估算法的随机 性、可预测性。更改后的算法应经过严格的测试和验证并公开。
表4 随机抽取结果生成模型的算法
步骤 主要内容
计算方法 x ← x0 # 赋初始值为随机种子 for k=1,2,…,n x ← (a*x) mod M # a乘以x,再对M取余数,生成新的随机数 x ← (a*x) mod M J[1] ← floor(x*n/M + 1) # floor为向下取整函数 k ← 1 while(k
5
DB35/T 2223—2024
表 4 随机抽取结果生成模型的算法(续)
步骤 主要内容
计算方法 J[0] ← floor(x*n/M + 1) # floor为向下取整函数 # 检查J[0]是否已存在于结果数组J中 if ( all( J[1:k]-J[0] != 0) ) # 如果J[0]不在数组J的前k个元素中 { k ← k+1 J[k] ← J[0] # 将 J[0] 添加到结果数组J中 } } J ← sort(J) # 对结果数组J进行排序
输出结果 J1,J2,…,Jm # 随机生成的m个入围投标人,按照随机编号生成模型分配的序号从小到大排列
8 随机抽取程序要求
8.1
模型公开要求
满足以下要求:
—— 所使用的模型及其变更应及时通过平台运行服务机构的门户网站进行公开,包括但不限于随
机种子生成模型、随机编号生成模型、随机抽取结果生成模型;
—— 模型的参数设置、计算方法及解释说明应明确记录在公开文档中。
8.2
应用集成要求
满足以下要求:
—— 应采用组件化的方式进行开发、维护;
—— 应提供标准化的接口和文档,并与电子交易平台无缝集成供其调用。
8.3
安全防护要求
满足以下要求:
—— 在程序运行期间及数据存储等过程应具备防篡改能力;
—— 应采用国密算法对重要数据进行加密,重要数据包括但不限于随机种子、抽取结果;
—— 宜使用区块链技术对随机种子等关键参数进行存证。
9 验证程序要求
9.1
公开要求
满足以下要求:
—— 验证程序应支持离线运行,与验证算法一并通过平台运行服务机构的门户网站公开,供交易
主体和社会公众和使用;
—— 在公开验证程序时,应公开该安装包的 HASH 值并加盖平台运行服务机构的电子签章,确保安
装包未被篡改;
6
DB35/T 2223—2024
—— 验证程序应定期维护,并与模型同步更新。
9.2
数据导入要求
满足以下要求:
—— 验证程序应支持导入由电子交易平台导出的与随机种子组成相关的数据;
—— 与随机种子组成相关的数据文件宜采用 XML 文件或 JSON 文件,供交易主体自行验证随机抽取
结果。
9.3
验证操作要求
满足以下要求:
—— 现场验证工作宜由招标人或其委托的招标代理机构负责;
—— 参与随机抽取投标人的电子投标文件受理时间、投标人数量等随机种子组成信息并导入
至验证程序;
—— 执行验证程序并导出随机抽取结果,应与电子交易平台生成的随机抽取结果进行比对,验证
是否一致;
—— 宜提供随机抽取结果生成过程的日志文件供第三方对随机性进行验证,同时使用统计学方法
对随机抽取结果进行验证。
验证流程见附录 A 的 A.4,项目应用示例见附录 A 的 A.5。
7
DB35/T 2223—2024
附 录 A
(资料性)
应用示例
A.1 随机种子生成模型
示例:
/** * Java类 */ public class Xxx { /** * 随机种子的计算 * @param bidders 参与本次招标的解密成功的投标人数量 * @return 返回随机种子的字符串 * @throws ServiceException */ public String generateRandomSeed( List
> bidders) throws ServiceException { int n = bidders.size();// 投标人数量 long j = 0;// 总秒数 //遍历参与本次招标的解密成功的投标人名单,转换其所有电子投标文件受理时间(以服务器上记录时间为 准,并将其转换成距离投标当日0时0分0秒的秒数)为数字并累加总秒数 for (int i = 0; i < n; i++) { long s = DateUtils.getTime(bidders.get(i).getString("V_DELIVER_TIME")); j += s; } //计算解密成功的电子投标文件受理时间(以服务器上记录时间为准,并将其转换成距离投标当日0时0分0 秒的秒数)的平均数四舍五入取整,并在末尾加上以4位整数表示的参与本次招标的解密成功的投标人数量 String xx = String.valueOf(Math.round(j * 1.0 / n)) + nextSeqByFour(n); logger.info(LogUtils.format("随机种子:" + xx + "种子位数:" + xx.length())); return xx ; } /** * 数字前补0至长度为4 */ private static String nextSeqByFour(int no) {
8
DB35/T 2223—2024
DecimalFormat countFormat = new DecimalFormat("0000"); return countFormat.format(no); } }
A.2 随机编号生成模型
示例:
/** * Java类 */ public class Xxx { /** * 生成投标人随机编号 * @param x 随机种子 * @param n 参与本次招标的解密成功的投标人数量 * @param list 参与本次招标的解密成功的投标人信息列表 * @return 返回随机编号后的投标人信息列表 * @throws ServiceException */ public Map> assignRandomBidderNumbers(long x, int n, List