为了账号安全,请及时绑定邮箱和手机立即绑定

从字符串值创建唯一的短 ID

从字符串值创建唯一的短 ID

胡子哥哥 2023-06-06 16:19:18
我有一些数据具有以字符串形式存储的唯一 ID:ddd.dddddaddd.dddddz哪里d是一些数字和a/z是一些字母字符。数字可以是 0-9,字符可以是Eor Wfor thea和Nor Sfor the z。我想把它变成一个唯一的整数,我尝试使用该hashlib模块返回:>>> int(hashlib.sha256(str.encode(s)).hexdigest(), 16) Output: a very long integer (on another system cannot copy it)有没有办法从字符串中生成一个唯一的整数 ID,使其不超过 12 位?我知道我永远不需要超过 12 位的唯一整数 ID。
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

只是一些简单的事情:


>>> s = '123.45678W123.45678S'

>>> int(s.translate(str.maketrans('EWNS', '1234', '.')))

123456782123456784

不是您在问题中仍然要求的不可能的 12 位数字,而是您在评论中允许的 20 位数字以下。


查看完整回答
反对 回复 2023-06-06
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

由于您正在处理坐标,我会尽力将信息保留在最后的 12 位 ID 中。

  • 如果您的点是全球性的,则可能有必要保留度数,但它们可能分布广泛,因此您可以在精度方面牺牲一些信息。

  • 如果您的点是局部的(都在小于 10 度的范围内),您可能会跳过度数的前两位数并关注小数点。

  • 由于两个点可能彼此接近,因此保留一位数字作为序列号可能是谨慎的做法。

广泛点的建议:

s = "123.45678N123.45678E"

ident = "".join([s[0:6],s[10:16]]).replace(".","")

q = 0

if s[9]=="N":

    q+=1

if s[-1]=="E":

    q+=2

ident+=str(q)+'0'

该示例将转换为123451234530.


在计算出每个 ID 的初始ident数字后,您应该遍历它们并递增最后一位数字(如果ident已使用)。


通过这种方式,您可以通过将前 10 位数字分隔为格式 ddd.dd 的两度并使用 [-2] 数字作为象限的指示符(0:SW,1:SE, 2:西北,3:东北)。


查看完整回答
反对 回复 2023-06-06
  • 2 回答
  • 0 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信