曾管理一万多台快递柜,优化了系统中生成唯一取件码的算法。

项目:https://github.com/nnhy/PickupCode

新建项目,添加 Nuget 应用 NewLife.Redis ,借助其Add去重能力。

代码如下:

private static void Main(string[] args)
{XTrace.UseConsole();var redis = new FullRedis("127.0.0.1", null, 3);var stationCode = "2743";for (int i = 0; i < 8; i++){var code = BuildPickupCode(redis, stationCode);XTrace.WriteLine("取件码{0}:{1}", i + 1, code);}
}/// <summary>为站点生成唯一取件码</summary>
/// <param name="cache">redis确保48小时不重复</param>
/// <param name="stationCode">站点编码</param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
/// <exception cref="Exception"></exception>
static string BuildPickupCode(ICache cache, string stationCode)
{if (stationCode.IsNullOrEmpty()) throw new ArgumentNullException(nameof(stationCode));var rnd = new Random();for (int i = 0; i < 10; i++){// 生成6位随机数作为取件码,不足6位时前面补0var code = rnd.Next(100000, 1000000).ToString().PadLeft(6, '0');// 站点结合取件码作为唯一key,Redis去重确保48小时内不重复。如果重复再生成一次新的随机数var key = $"{stationCode}:{code}";if (cache.Add(key, code, 48 * 3600)) return code;}// 连续10次都失败,就有可能是redis网络或代理有问题了throw new Exception("Build PickupCode Error!");
}

运行效果

原理比较简单,借助Redis的SETNX能力,当key不存在时添加,已存在时不改变已有值。

SETNX的返回值0和1表示是否添加成功。

在NewLife.Redis中redis.Add即是SETNX的封装,如果添加成功,说明这个随机取件码可用,反之则生成新的随机取件码。

Add第二个参数意义不大,第三个参数表示有效期,这里使用48小时。也就是说,这个key在48小时后将会自动消失,该取件码将有可能重新生成用于新的快递。实际运营中,这个有效时间也可能是5到7天。

最后吐槽一下,很多快递柜的8位取件码,实在不利于快速记忆,不利于便捷输入。如果使用6位,大多数人看一次默念一下,即可完成输入!

快速生成快递柜唯一取件码相关推荐

  1. 隧道保活超时或协商超时_快递柜超时取件需收费!网友炸了:这笔钱凭什么我们出?...

    最近几天有网友发现 在丰巢取快递的时候 屏幕上多了一则消息 从4月30日起 丰巢快递柜推出会员制 以前免费使用的快递柜 今后要收费了 针对普通用户,12小时内免费保管包裹,超时后0.5元/12小时,3 ...

  2. 快递取件码生成软件_一种分布式的取件码生成方法技术

    [技术实现步骤摘要] 本专利技术涉及样品柜取件码生成 ,特别涉及一种分布式的取件码生成方法. 技术介绍 在快递柜的领域中,快递员进行快件派送的时候,通常会遇到收件人无法立刻来取件的情况,这样就需要快递 ...

  3. 快递取件码生成软件_一种自动生成取件码的快递柜及其使用方法与流程

    本发明涉及快递柜技术领域,尤其是自动生成取件码的快递柜及其使用方法. 背景技术: 近年来,随着快递业的迅速发展,快递柜的应用也越发广泛.为了解决快递智能存储问题,许多小区已经安装了智能快递柜,快递员将 ...

  4. 快递取件码生成软件_一种快递柜取件码生成装置及其使用方法与流程

    本发明涉及快递柜技术领域,尤其是快递柜取件码生成装置及其使用方法. 背景技术: 随着人们生活与消费水平的提高,快递业也迅猛发展,快递柜的应用也越来越普及.现如今,许多社区或公共场所已经安装了大量的智能 ...

  5. python生成快递取件码没了怎么办_货到速递易,但没有收到取件码,怎么办

    展开全部 没有收到短信或者误删了短信,可以在速62616964757a686964616fe78988e69d8331333431353238递易柜子申请重新发送提取码. 1.速递易柜子操作,点击速递 ...

  6. 快递取件码生成软件_智能快递箱:手机扫码1分钟取件 短信生成密码一柜一码

    智能快递箱:手机扫码1分钟取件 快递箱是采用银行级专用电子回单柜 生成短信安全码 一柜一码 昨日,和平区某小区快递箱前,正有业主扫码准备取件.辽沈晚报.聊沈客户端记者 姜旭 摄 沈阳将全面铺开小区门口 ...

  7. java基本微信小程序的快递柜自动取货管理系统 uniapp 小程序

    随着计算机信息技术的发展,越来越多的用户使用手机,各种信息化应用出现在智能手机中,特别是微信APP拥有大量的用户群,使用微信小程序可以为人们的生活提供便利.另一方面,我国网购数量日益增加,各大城市快递 ...

  8. 淘宝、支付宝菜鸟小程序取件码找不到的解决方法

    淘宝.支付宝菜鸟小程序身份码找不到的解决方法 今天拿快递的时候在淘宝里面找身份码,死活找不到,明明之前可以找到的,最后还是下载了菜鸟裹裹app才能取件.上网搜索了一下,发现有的地方很早就把小程序里面的 ...

  9. 免费试用快递鸟预约取件API接口文档

    1.下单类接口 1.1 预约取件接口 功能说明 1. 预约取件为用户解决在线发货需求,在线通知快递员上门取件,适用于在线下单.APP端下单.售后退货等,此接口用于通知快递公司快递员上门揽件. 2. 支 ...

最新文章

  1. 防火墙(15)——SNAT和DNAT,SNAT实践
  2. Hive SQL的编译过程
  3. linux由众多微内核组成,什么是linux
  4. 爱了!蚂蚁开源的“SpringBoot”框架,新增了这6项功能...
  5. typecho模板ajax,typecho ajax登陆
  6. mysql索引创建和使用注意事项
  7. 深圳软件开发向前跳转会略过一些节点
  8. ES6新特性_ES6中模块暴露数据语法汇总---JavaScript_ECMAScript_ES6-ES11新特性工作笔记043
  9. puppet之用户管理
  10. 347.前K个高频元素(力扣leetcode) 博主可答疑该问题
  11. matlab求解联名方程组带三角函数的,matlab三角函数方程组
  12. 前端工程师的摸鱼日常(15)
  13. OpenCV——分离颜色通道,图像对比度,亮度调整,离散傅里叶变换(10)
  14. 线性代数笔记【特征值】
  15. java为什么被开发者_Spring为何受到Java开发者的青睐?Spring是如何简化Java开发的?...
  16. 初步支持三维Wavefront object模型
  17. 如何优雅地打印一个Java对象?
  18. Android实现snmp协议(一)
  19. karas + opencv 实现AlexNet神经网络应用于图像分类
  20. var和let的区别

热门文章

  1. [从头读历史] 第255节 孔子和他的《春秋》 [BC657至BC598]
  2. java cron 每100分钟执行一次
  3. 7-3 最长公共前后缀
  4. MATLAB中安装YALMIP及CPLEX详细步骤
  5. Must specify port after ':' in connection string问题
  6. 中年危机总在不经意间来到
  7. 【ARMv8基础篇】DMC-400控制器简介
  8. python的学习笔记案例1--汇率兑换4.0
  9. 用友BIP 安装配置专业脚手架开发工具(图文)
  10. 【zotero】从知网万方维普WOS等数据库上导出格式引文-引文格式到zotero中