V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pming1
V2EX  ›  Node.js

较为困惑的防伪二维码开发需求,想请教大家一些想法

  •  
  •   pming1 · 2016-05-25 19:46:51 +08:00 · 4338 次点击
    这是一个创建于 3105 天前的主题,其中的信息可能已经有所发展或是发生改变。


    类似这样的防伪二维码,后边有一串序列号,根据序列号生成对应的二维码(带序列号参数的链接),然后左边是 1~8,8 个固定数字,数字上面有不定数量的随机位置的随机颜色的点。

    问题来了,通过这一串序列号,如何生成这些唯一的点呢?(包括数量,位置,颜色),,, 想破脑袋都没能想出来,,, TAT

    22 条回复    2016-05-27 16:16:38 +08:00
    bearice
        1
    bearice  
       2016-05-25 19:59:01 +08:00
    吧序列号当成随机种子即可
    a342191555
        2
    a342191555  
       2016-05-25 20:01:30 +08:00   ❤️ 1
    看完了没看明白这个问题和二维码有啥关系- -
    debiann
        3
    debiann  
       2016-05-25 20:04:34 +08:00 via iPhone
    用一一映射的加密算法对序列号作变换,得到另一个数字。对得到的数字作分割,分三份,作为点的横坐标,纵坐标,颜色参数
    loading
        4
    loading  
       2016-05-25 20:07:22 +08:00 via Android
    你要那几个数字干嘛?二维码每次都重新生成不就好了?

    你看看支付宝的支付二维码…


    求你们不要做这些二次的所谓自主产权的开发了…
    debiann
        5
    debiann  
       2016-05-25 20:24:52 +08:00 via iPhone
    @loading 如果这东西是贴在商品上的呢
    loading
        6
    loading  
       2016-05-25 20:36:08 +08:00 via Android
    @debiann 批量生成!记得使用刮刮刮刮…
    loading
        7
    loading  
       2016-05-25 20:39:50 +08:00 via Android
    @debiann 其实用这个做商品防伪没用!

    记得那些刮刮的序列号吗?上面提供的验证短信号码就是假的…


    如果用二维码做一次性 url 验证,贴在商品上的都是瞎扯,做一个假的钓鱼站点,不就妥了…
    debiann
        8
    debiann  
       2016-05-25 21:00:37 +08:00 via iPhone
    @loading 你没理解这个东西的作用。用序列号生成最左边的图片,生成的算法和秘钥只有发布者知道。钓鱼网站是给不出正确的图案的。
    yeyeye
        9
    yeyeye  
       2016-05-25 21:06:00 +08:00   ❤️ 1
    这个世界没有二维码搞不定的事情 如果有 那就 2 个二维码!

    最后,我仍然是没明白楼主到底想要搞什么鬼,按说算法什么的,你爱怎样弄就怎样弄啊,为什么要想不通……

    @pming1 @bearice @a342191555 @debiann @loading
    pming1
        10
    pming1  
    OP
       2016-05-25 21:16:36 +08:00
    @yeyeye 这是一个客户的需求,是贴在他们的商品上面用作防伪标签的,防伪最主要体现在二维码左边的那些随机数量随机位置随机颜色的点
    pming1
        11
    pming1  
    OP
       2016-05-25 21:17:36 +08:00
    @yeyeye 我是想不通,如何根据已知的序列号,生成唯一与之对应的这些彩色点
    cnnblike
        12
    cnnblike  
       2016-05-25 21:17:54 +08:00
    楼主你去问一下,能不能把这些点放在二维码里面,然后你就只需要把二维码中的某几个点染成红色就行了
    pming1
        13
    pming1  
    OP
       2016-05-25 21:19:15 +08:00
    @bearice 随机种子?但如何保证,每次通过这个序列号,都能生成一样的点呢?
    pming1
        14
    pming1  
    OP
       2016-05-25 21:20:21 +08:00
    @a342191555 嗯,重点不是二维码,是二维码左边的彩色点,不知道如何根据序列号生成唯一的一系列点(包括数量,颜色,位置)
    soland
        15
    soland  
       2016-05-25 21:23:55 +08:00
    @pming1 这个有什么能想不通的,把已知的序列号变成坐标不就完了。而且这需求是不是本身就没想明白,就是个伪需求。
    yeyeye
        16
    yeyeye  
       2016-05-25 21:59:55 +08:00
    @pming1 “但如何保证,每次通过这个序列号,都能生成一样的点呢?”

    你去看看身份证号码的计算方法吧 最后一位是计算出来的 而你那个点所在的位置可以用 xy 轴来表示,说白了就是生成 2 个数字,然后按照计算出来的 XY 轴印刷点,有什么问题?反正我觉得根本就不知道你的难点在哪,或者说……根本就不存在什么难点。

    还有一种方法 根本不用按照什么什么来计算什么什么 直接随机生成坐标 和序列号的关系 然后存到数据库里查就行了?
    binux
        17
    binux  
       2016-05-25 22:07:51 +08:00
    你把二维码和那些点看成数字,然后不就是一个数字到另一个数字的映射吗。这就是问题抽象能力啊。
    dixyes
        18
    dixyes  
       2016-05-25 23:13:54 +08:00 via Android
    hash 下序列号 然后取一个三四位十进制摘要(从序列号到摘要的算法得保密)
    然后奇数位出现一个数字就在对应的格子打个绿色 偶数位打个红色(机智如我
    a342191555
        19
    a342191555  
       2016-05-25 23:16:32 +08:00
    @pming1 用个固定算法 HASH 一下这个序列号吧,另外随机和不重复是相矛盾的,只能说碰撞概率较小,如果一定要不重复的话遇到重复时再人工处理下吧。
    随便举个解法,供参考。 HASH 一个 5 维向量, 2 维用在坐标上,剩下 3 维用在 RGB 原色上。
    EchoWhale
        20
    EchoWhale  
       2016-05-26 11:22:39 +08:00
    楼主你的真正需求是防伪,但是我有点想不明白:
    就算你的右边的序列号能生成唯一的左边的点点,就能防伪了吗?
    用户的验证场景能不能说一下?是不是这样:
    用户扫二维码,然后会跳到一个已经包含了序列号信息的一个网页。然后用户在页面上输入左边的点点信息,如果和你实时生成或者预存在数据库里的点点信息一致,就告诉用户这是正品?
    如果是这样,山寨产品很容易造假啊
    rekulas
        21
    rekulas  
       2016-05-26 15:23:34 +08:00
    直接 hash 序列号,然后根据结果来计算就行了,比如 4 位为一组 第一位位置 x 第二位 y 第三位颜色 第四位是否出现 如果参数还不够就继续增加位数 什么样的要求都能满足了
    bearice
        22
    bearice  
       2016-05-27 16:16:38 +08:00
    @pming1 https://en.wikipedia.org/wiki/Pseudorandom_number_generator
    其实这个和生成 minecraft 地图是一样,都是根据一个种子得到一个伪随机序列,然后根据这个序列通过一系列映射得到一个对象

    其实用 hash 的办法也行,如果一次 hash 得到的数据长度不够就再 hash 一次
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3094 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:11 · PVG 08:11 · LAX 16:11 · JFK 19:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.