新网站微信公众号周年活动抽奖代码公示

文章目录

为了庆祝网站与微信公众号上线一周年,现正式公布周年活动的抽奖代码及流程。此次活动将通过公平透明的方式,从参与的用户中抽出前五名幸运用户。本文将展示具体的代码实现与规则解释,以确保活动的公开性和可信度。

抽奖算法流程

此次抽奖使用了微信昵称 Hash 值转整数的方式进行排名,确保结果随机性和可验证性。具体步骤如下:

  1. 上证指数参考值:抽奖以 2023 年 6 月 30 日的上证指数收盘价(3202.06)为参考,将小数部分"06"作为中奖参考数字。昵称 Hash 转整数的末两位数越接近该值,排名越靠前。
  2. 生成用户名单:所有符合条件的参与者信息已在列表中登记。参与用户的微信昵称和参与时间被记录,确保数据的一致性与透明度。
  3. 昵称 Hash 转换规则:通过 Python 代码将每位用户的微信昵称转为 SHA-1 Hash,再将 Hash 转换为整数,取末两位作为用户抽奖编号。
  4. 排序规则:根据用户编号与中奖参考数字的距离排序;若两位用户距离相同,则按参与时间优先级决定排名。

代码实现

以下为完整的 Python 代码:

# 新网站周年庆活动抽奖代码

import hashlib

# 6月30日上证指数收盘价作为中奖参考数
sse_index = "3202.06"
lucky_number = int(sse_index.split(".")[1])
print(f"6月30日上证指数:{sse_index},中奖参考数:{lucky_number}")

# 符合条件的用户信息
users = [
    {"nickname": "用户昵称", "time": 202306270819}
]

# 抽奖计算
lottery_users = []
for user in users:
    nickname = user["nickname"]
    time = user["time"]
    nickname_hash = hashlib.sha1(nickname.encode("utf-8")).hexdigest()
    hash_number = int(nickname_hash, 16)
    user_number = hash_number % (10**2)
    lottery_users.append({
        "nickname": nickname,
        "time": time,
        "nickname_hash": nickname_hash,
        "hash_number": hash_number,
        "user_number": user_number
    })
lottery_users.sort(key=lambda x: (abs(x["user_number"] - lucky_number), x["time"]))

# 输出排名表
table_header = "| 排名 | 微信昵称 | 昵称Hash转整数最后2位数 | 整数值 | 哈希值 | 参与时间 |\n| --- | --- | --- | --- | --- | --- |"
sorted_table_rows = []
for rank, row in enumerate(lottery_users, start=1):
    sorted_table_rows.append(
        f"| {rank} | {row['nickname']} | {row['user_number']} | {row['hash_number']} | {row['nickname_hash']} | {row['time']} |"
    )
print("\n----------\n\n符合条件用户排名列表:\n")
markdown_table = f"{table_header}\n" + "\n".join(sorted_table_rows)
print(markdown_table)

该代码展示了一个简单的流程,最终输出排名结果。我们提醒用户,若遇到相同昵称的情况,将由人工协助确认。

活动注意事项

  • 参与方式:所有注册并符合条件的用户均会被自动记录参与。
  • 透明度:为确保公平公正,抽奖过程可通过 Hash 值验证。
  • 获奖公布:最终排名前五名的用户将获得周年庆大奖。

常见问题解答(FAQ)

Q1:如何确保活动公平性?

A1:我们使用了不可变的 Hash 值计算和公开的上证指数值作为中奖参考数,确保过程透明。

Q2:什么是中奖参考数?

A2:6 月 30 日上证指数的末两位小数“06”作为中奖参考数,用于确定接近该数字的用户排名。


也可以看看