博客

  • apiCloud的frame的小用法

    通过设置frame的背景颜色透明度实现蒙版效果。

    代码如下:
    api.openFrame({
              name: 'search_frm',
              url: './main_frame/common/search_frm.html',
              rect: {
                  x: 0,
                  y: top,
                  w: 'auto',
                  h: 'auto'
              },
              pageParam: {
                  top: top
              },
              bounces: false,
              bgColor: 'rgba(248,248,255,0.0)',
              vScrollBarEnabled: true,
              hScrollBarEnabled: true,
          });

    通过设置背景的rgba的透明度来实现蒙版效果,这里要注意一点,frame中的html和body背景颜色需要继承父类的背景颜色,否则背景还是没有透明的。


    ————————————————
    版权声明:本文为CSDN博主「MrSunOcean」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/MrSunOcean/article/details/79518041

  • Pi专题 – Pi 不仅仅是一种加密货币

    Pi 不仅仅是一种加密货币,它是斯坦福博士团队(https://minepi.com/team)开发的革命性创业项目,将区块链技术和加密货币所带来的经济价值和社会效益传递给普通民众。Pi的愿景是建立世界上最具包容性的点对点市场(peer-to-peer marketplace),由世界上使用最广泛的加密货币 Pi 去推动。

      

    相信大部分人都听说过比特币或者区块链,如果你还没有听说过比特币,或者只是一知半解,下面这两个视频是我见过最简洁明了的科普视频,每段大概15分钟,建议您先看完它再接着读下去。(来自bilibili,建议浏览器打开)比特币和区块链啥原理?矿机挖矿咋回事?李永乐老师讲比特币(1)https://www.bilibili.com/video/av45247943/比特币交易如何防伪?私钥公钥地址啥意思?李永乐老师讲比特币(2)

    https://www.bilibili.com/video/av45597148/

    Pi 是什么?

    毫不掩饰地说,Pi 是一种新的加密货币。在撰写本文时,全球已有超过30万的Pi network用户。这说明它确实在普通民众中引起了不小的轰动。Pi 并不是第一个用手机挖矿的加密货币,但它是目前最容易获得的加密货币之一。因为你不需要去购买它,而且你只需在手机上下载一个应用程序,简单注册后就可以持续获取(挖矿),不费流量不费电,兼容iOS和Android。

    Pi 不仅仅是一种加密货币,它是斯坦福博士团队(https://minepi.com/team)开发的革命性创业项目,将区块链技术和加密货币所带来的经济价值和社会效益传递给普通民众。Pi的愿景是建立世界上最具包容性的点对点市场(peer-to-peer marketplace),由世界上使用最广泛的加密货币 Pi 去推动。

    就像早期的比特币一样,开采比特币真的很容易,在自己的个人电脑上运行比特币挖矿软件就可以赚取50个比特币。随着它开始流行,聪明的矿工们意识到,如果他们有不止一台电脑在开采,他们可以赚更多的钱。随着比特币价值的持续增长,整个公司都加入挖矿大潮。这些公司开发了专门的芯片(“ASIC”),并利用这些ASIC芯片构建了大量的服务器集群(矿场)来开采比特币。这些巨大的矿业公司的出现,推动了比特币淘金热,但也使得普通人很难为区块链网络做出贡献并且得到回报。而且,也开始消耗越来越多的算力(费电),间接导致世界各地环境问题日益严重。比特币开采的便利性以及随后比特币矿场的兴起很快使比特币网络中的算力和财富实现了大规模集中。例如,87%的比特币现在由1%的网络所持有,其中许多币在早期几乎是免费获得的。也出现了像全球最大的采矿公司之一——比特大陆(Bitmain)这样的巨头,其收入和利润已达数十亿美元。

    这违背了这项技术的初衷,普通人根本没法参与竞争,为此, Pi network应运而生。

    Pi 为草根而生

    在确定了Pi愿景后,核心团队开始寻找一种方法,能够允许普通民众参与挖掘。值得一提的是,维护分布式账本所面临的主要挑战之一是确保交易不存在欺诈性。虽然比特币验证交易的方式(消耗能量/金钱以证明其可靠性)是可靠的,但它对用户或环境非常不友好。在Pi中,采用了定制的共识算法,该算法对用户友好,并且能够在个人计算机和智能手机上进行挖掘。

    在比较现有共识算法(记账的过程)时,Stellar共识协议成为实现用户友好、智能手机挖掘的主要候选方案。SCP使用一种称为联邦拜占庭协议的新机制来确保对分布式账本的更新是准确和可信的。SCP是由斯坦福大学计算机科学教授戴维MaZi-Eres设计的,他也是恒星发展基金会的首席科学家。

    Pi的共识算法建立在SCP之上,(SCP目前已在Stellar network中得到验证)。与主要由公司和机构(如IBM)作为节点的Stellar不同,Pi打算允许个人设备在协议级别做出贡献并获得奖励,包括智能手机、笔记本电脑和台式机。

    Pi 经济模型

    比特币最令人印象深刻的创新之一是分布式系统与经济博弈理论的结合。Pi试图在创造一种平衡,在稀缺性、公平性和效率之间取得平衡。我们希望确保我们的用户在为网络做出贡献时获得更多的Pi。Pi的目标是建立一个足够复杂的经济模型,以实现和平衡这些矛盾,同时保持足够直观,供人们使用。

    Pi的经济模型设计要求:

    简单:构建直观透明的模型

    公平分配:使世界上大量的人可以获得Pi

    稀缺性:随着时间的推移,创造一种稀缺感来维持Pi的价格

    激励机制:奖励建立和维持网络的贡献者

    Pi 未来前景

    互联网上最大的挑战之一就是去判断应该信任谁。今天,我们依赖亚马逊(Amazon)、eBay、Yelp等供应商的评级系统,以了解我们可以在互联网上与谁进行交易。尽管我们作为客户,也为信用评级做了很大的贡献,但是这些互联网巨头获取了其中大部分的价值。

    Pi 注意力市场-交换未利用的注意力和时间

    Pi允许其成员汇集他们的集体注意力,创造一个比任何个人的注意力都更有价值的关注市场。Pioneers可以通过分享内容(例如,文本,图像,视频)或提出试图利用社区集体智慧的问题来吸引网络其他成员的注意力。在Pi网络上,每个人都有机会成为影响者或利用人群的智慧。

    除了与同行交换关注之外,Pioneers还可以选择与寻求他们关注的公司进行交易。美国人平均每天看到4000到10000个广告,公司尽力去吸引我们的注意力并为此付出巨额资金。但是,我们不会从这些交易中获得任何价值。在Pi的注意力市场,寻求接触Pioneers的公司将不得不补偿他们在Pi中的受众。Pi 的广告市场将严格准入规则,并为用户提供一个机会,让他们将最大的未开发资源之一(注意力)货币化。

    Pi的易货市场 – 构建您的个人虚拟店面

    除了为Pi网络提供信任和关注外,我们还希望Pioneers能够在未来贡献自己独特的技能和服务。Pi的移动应用程序也将作为销售点,Pi的成员可以通过“虚拟店面”向Pi网络的其他成员提供未开发的商品和服务。例如,一个成员在他们的公寓中提供一个未充分利用的房间出租给Pi网络上的其他成员。除了真实资产,Pi Network的成员还可以通过他们的虚拟店面提供技能和服务。例如,Pi Network的成员可以在Pi市场上提供他们的编程或设计技能。随着时间的推移,Pi的价值将得到越来越多的商品和服务的支持。

    分散应用生态系统的土壤

    今天,任何想要启动应用程序的人都需要从头开始引导其技术基础架构和社区。Pi的分散式应用程序商店将允许Dapp开发人员利用Pi的现有基础架构以及社区和用户的共享资源。企业家和开发人员可以通过访问网络共享资源的请求向社区提出新的Dapps。Pi 还将构建具有一定互操作性的数据应用程序,以便数据应用程序能够引用其他分散应用程序中的数据、资产和流程。

    路线图/部署计划

    第1阶段 -设计、分发、信任图引导。

    所有数据运行在测试网上,当前的主要任务是扩展用户,分发Pi。并对其中的功能进行测试和改进。

    第2阶段—测试网

    在我们启动主网之前,节点软件将部署在测试网上。测试网将使用与主网相同的完全信任图,但使用测试Pi币。Pi核心团队将在测试网上托管多个节点,但会鼓励更多先锋启动自己的节点。实际上,为了让任何节点加入主网,建议他们先在测试网上运行。测试网络将与第一阶段的Pi模拟器并行运行,并定期(例如每天)比较来自两个系统的结果,以捕获测试网络的漏洞,这将允许Pi开发人员提出并实现修复。在完全同时运行两个系统之后,测试网将达到其结果始终与仿真器匹配的状态。当社区感觉准备就绪时,Pi将迁移到下一个阶段。

    第3阶段 – 主网

    当社区认为软件已经准备好上线,并且已经在测试网上进行了全面测试时,Pi网络的官方主网将会发布。一个重要的细节是,在向主网的过渡中,只有通过KYC认证的用户,他所获得的Pi 才会被认可。将关闭测试网,系统将永远独立运行。该协议的未来更新将由Pi开发人员社区和核心团队提供,并将由委员会提出。它们的实现和部署将依赖于节点更新挖掘软件,就像任何其他区块链一样。没有中心机构控制货币,它将完全去中心化。虚假用户或重复用户的余额将被销毁。这是Pi可以连接到交易所并兑换其他货币的阶段。

    Pi 矿工

    下面介绍了Pi如何利用SCP算法实现个人挖矿。

    作为Pi矿工,用户可以同时以下四个身份。即:

    先锋:Pi network App的用户,每天需要激活,确认他们不是“机器人”。用户每次登录时都会验证。他们还可以在应用程序中进行交易(例如,向另一位先锋转账)。

    贡献者:Pi App的用户可添加自己认识并信任的用户到安全圈列表,从而获得奖励。总的来说,Pi贡献者将构建一个全局信任图。

    大使:Pi App用户, 通过邀请码的方式邀请其他用户加入。

    节点:先锋和贡献者可以在台式机或笔记本电脑上运行Pi节点软件。Pi节点软件是运行核心SCP算法的软件,包含贡献者提供的信任图信息。

    只要用户在当天处于激活状态,都可以获得由以上身份带来的奖励。用户每24小时需要激活一次(点击一下即可),如果24小时后不激活,即停止挖矿。

    Pi 总量

    Pi总量不是固定的,而是由用户发展的趋势决定。每当活跃用户数量增加10倍时,挖掘的基本速率就会减半。当Pi网络达到一定数量的用户(例如1000万或1亿)时,该速率最终将降至0。到那个时候,就如比特币一样,挖掘者的奖励将会通过交易费的形式而不是通过出新币的方式来获得回报。

    Pi 价值

    目前,Pi 的价值为0。

    “None of Pi is get rich quick. It takes time and commitment to do well.”Pi 社区没有人可以赚快钱,它需要时间和诺言。

    本文由 链话题chaintopic 作者:无争 发表,其版权均为 链话题chaintopic 所有,文章内容系作者个人观点,不代表 链话题chaintopic 对观点赞同或支持。如需转载,请注明文章来源。

  • PI界面翻译对照

     

    本文由 链话题chaintopic 作者:K 发表,其版权均为 链话题chaintopic 所有,文章内容系作者个人观点,不代表 链话题chaintopic 对观点赞同或支持。如需转载,请注明文章来源。

  • Pi network 白皮书(中英文对照版)

    Introduction
    引言
    Problem: Accessibility of 1st Gen Cryptocurrencies
    问题:第一代加密货币的易用性
    Solution: Pi – Mining Goes Mobile
    解决方案:Pi-让挖矿运行于移动终端
    Pi Economic Model: Balancing Scarcity and Access
    Pi经济模型:稀缺性与获取性的平衡
    Utility: Monetizing untapped resources in p2p
    效用:将p2p中尚未开发的资源货币化
    Governance – Currency for and by the people
    治理——众创和众用的货币
    Roadmap / Deployment plan
    路线图/部署计划
    Draft 1 on March 14, 2019
    草案1 2019年3月14日
    Preface
    前言
    As the world becomes increasingly digital, cryptocurrency is a next natural step in the evolution of money. Pi is the first digital currency for everyday people, representing a major step forward in the adoption of cryptocurrency worldwide.
    随着世界变得越来越数字化,加密货币成为货币发展的自然趋势。Pi将是每一个人日常生活中使用的第一种数字货币,标志着全世界在采用加密货币方面向前迈进了一大步。
    Our Mission: Build a cryptocurrency and smart contracts platform secured and operated by everyday people.
    我们的使命:建立一个平常人能运用的加密货币智能合约平台,既安全又易于操作。
    Our Vision: Build the world's most inclusive peer-to-peer marketplace, fueled by Pi, the world's most widely used cryptocurrency.
    我们的愿景:在Pi(世界上使用最广泛的加密货币)的推动下,建立世界上最具包容性的p2p市场。
    DISCLAIMER for more advanced readers: Because Pi's mission is to be inclusive as possible, we're going to take this opportunity to introduce our blockchain newbies to the rabbit hole
    免责声明:因为Pi的使命是尽可能包容,我们将借此机会介绍给新入场的区块链新手们:)
    Introduction: Why cryptocurrencies matter
    引言:为什么加密货币如此重要
    Currently, our everyday financial transactions rely upon a trusted third party to maintain a record of transactions. For example, when you do a bank transaction, the banking system keeps a record & guarantees that the transaction is safe & reliable. Likewise, when Cindy transfers $5 to Steve using PayPal, PayPal maintains a central record of $5 dollars debited from Cindy's account and $5 credited to Steve's. Intermediaries like banks, PayPal, and other members of the current economic system play an important role in regulating the world's financial transactions.
    目前,我们日常的金融交易依赖于一个值得信赖的第三方来维护交易记录。例如,当你进行银行交易时,银行系统会记录并保证交易是安全可靠的。同样,当辛迪使用贝宝向史蒂夫转移5美元时,贝宝保持着从辛迪账户借记5美元和记入史蒂夫账户5美元的中央记录。像银行、贝宝和当前经济体系的其他成员这样的中介机构在监管世界金融交易方面发挥着重要作用。
    However, the role of these trusted intermediaries also has limitations:
    然而,这些值得信赖的中介机构的作用也有局限性:
    Unfair value capture. These intermediaries amass billions of dollars in wealth creation (PayPal market cap is ~$130B), but pass virtually nothing onto their customers – the everyday people on the ground, whose money drives a meaningful proportion of the global economy. More and more people are falling behind.
    1.不公平的价值获取。这些中介机构积累了数十亿美元的财富创造(贝宝的市值约为1300亿美元),但几乎没有把任何东西转嫁给他们的客户——实地的普通人,他们攫取的钱财在全球经济中占有相当大的比重。越来越多的人被远远摔在身后而望尘莫及。
    Fees. Banks and companies charge large fees for facilitating transactions. These fees often disproportionately impact lower-income populations who have the fewest alternatives.
    2.费用。银行和公司为方便交易收取高额费用。这些费用往往严重影响到低收入人口,而他们别无选择。
    Censorship. If a particular trusted intermediary decides that you should not be able to move your money, it can place restrictions on the movement of your money.
    3.审查制度。如果一个信托机构认为你不应该转移你的钱,它可以对你的钱的流动设置限制。
    Permissioned. The trusted intermediary serves as a gatekeeper who can arbitrarily prevent anybody from being part of the network.
    4.许可。作为中间商的授信机构成为你进入全球网的守关人,可以任意阻止任何人成为网络的一份子。
    Pseudonymous. At a time when the issue of privacy is gaining greater urgency, these powerful gatekeepers can accidentally disclose – or force you to disclose – more financial information about yourself than you may want.
    5.隐私。在隐私问题变得越来越紧迫的时候,这些强大的看门人可能会意外地披露—-或者强迫你披露—-比你想要的更多的关于你自己的财务信息。
    Bitcoin's "peer-to-peer electronic cash system," launched in 2009 by an anonymous programmer (or group) Satoshi Nakamoto, was a watershed moment for the freedom of money. For the first time in history, people could securely exchange value, without requiring a third party or trusted intermediary. Paying in Bitcoin meant that people like Steve and Cindy could pay each other directly, bypassing institutional fees, obstructions and intrusions. Bitcoin was truly a currency without boundaries, powering and connecting a new global economy.
    比特币的"点对点电子现金系统"于2009年由一个匿名的程序员(或团体)中本聪发起,是货币自由的一个分水岭。有史以来第一次,人们可以安全地交换价值,而不需要第三方或信任的中间人。用比特币支付意味着像史蒂夫和辛迪这样的人可以直接互相支付,绕过机构收费、障碍和入侵。比特币是一种真正的无国界货币,为新的全球经济提供动力和连接。
    Introduction to Distributed Ledgers
    分布式分类账介绍
    Bitcoin achieved this historical feat by using a distributed record. While the current financial system relies on the traditional central record of truth, the Bitcoin record is maintained by a distributed community of "validators," who access and update this public ledger. Imagine the Bitcoin protocol as a globally shared "Google Sheet" that contains a record of transactions, validated and maintained by this distributed community.
    比特币通过使用分布式记录实现了这一历史壮举。尽管目前的金融体系依赖于传统的真实记录,但比特币的记录是由一个分布式的"验证者"社区维护的,这些"验证者"负责访问和更新这个公共账簿。把比特币协议想象成一个全球共享的"谷歌表",其中包含交易记录,由这个分布式社区验证和维护。
    The breakthrough of Bitcoin (and general blockchain technology) is that, even though the record is maintained by a community, the technology enables them to always reach consensus on truthful transactions, insuring that cheaters cannot record false transactions or overtake the system. This technological advancement allows for the removal of the centralized intermediary, without compromising transactional financial security.
    比特币(以及一般的区块链技术)的突破在于,尽管记录是由社区维护的,但该技术使他们总是能够就真实交易达成共识,确保骗子不会记录虚假交易或超越系统。这种技术进步允许取消集中的中介,而不损害交易性金融安全。
    Benefits of distributed ledgers
    分布式分类账的好处
    In addition to decentralization, bitcoin, or cryptocurrencies in general, share a few nice properties that make money smarter and safer, although different cryptocurrencies may be stronger in some properties and weaker in others, based on different implementations of their protocols. Cryptocurrencies are held in cryptographic wallets identified by a publicly accessible address, and is secured by a very strong privately held password, called the private key. This private key cryptographically signs transaction and is virtually impossible to create fraudulent signatures. This provides security and unseizability. Unlike traditional bank accounts that can be seized by government authorities, the cryptocurrency in your wallet can never be taken away by anyone without your private key. Cryptocurrencies are censorship resistant due to the decentralized nature because anyone can submit transactions to any computer in the network to get recorded and validated. Cryptocurrency transactions are immutable because each block of transactions represents a cryptographic proof (a hash) of all the previous blocks that existed before that. Once someone sends you money, they cannot steal back their payment to you (i.e., no bouncing checks in blockchain). Some of the cryptocurrencies can even support atomic transactions. "Smart contracts" built atop these cryptocurrencies do not merely rely on law for enforcement, but directly enforced through publicly auditable code, which make them trustless and can potentially get rid of middlemen in many businesses, e.g. Escrow for real estate.
    除了地方分权,比特币,或者一般的加密货币,共享一些好的属性,使货币更加智能和安全,虽然不同的加密货币可能在某些属性上更强,而在其他的弱,基于他们的协议的不同实现。加密货币存放在由公共可访问地址标识的加密钱包中,并由一个非常强大的私人密码保护,称为私人密钥。这种私钥通过密码签署交易,实际上不可能创建欺诈性签名。这提供了安全性和无可可抓取性。不像传统的银行账户可以被政府当局查封,你钱包里的加密货币永远不会被没有你私人钥匙的任何人拿走。由于分散的特性,加密货币具有抗审查的能力,因为任何人都可以向网络中的任何一台计算机提交交易,以获得记录和验证。加密货币事务是不可变的,因为每个事务块表示之前存在的所有块的加密证明(散列)。一旦有人寄钱给你,他们不能偷回他们的付款给你(也就是说,没有跳票在块环链)。一些加密货币甚至可以支持原子交易。建立在这些加密货币之上的"智能合同"不仅依赖于执法,而且直接通过可公开审计的代码执行,这使得它们不受信任,并有可能摆脱许多企业的中间商,例如房地产托管中介。
    Securing distributed ledgers (Mining)
    分布式总账的安全(挖矿)
    One of challenges of maintaining a distributed record of transactions is security – specifically, how to have an open and editable ledger while preventing fraudulent activity. To address this challenge, Bitcoin introduced a novel process called Mining (using the consensus algorithm "Proof of Work") to determine who is "trusted" to make updates to the shared record of transactions.
    维护分布式交易记录的挑战之一是安全性——具体来说,如何在防止欺诈活动的同时拥有一个开放和可编辑的分类账。为了应对这一挑战,比特币引入了一种名为挖矿(使用共识算法"工作证明")的新颖过程,以确定谁是"可信任的",从而更新交易的共享记录。
    You can think of mining as a type of economic game that forces "Validators" to prove their merit when trying to add transactions to the record. To qualify, Validators must solve a series of complex computational puzzles. The Validator who solves the puzzle first is rewarded by being allowed to post the latest block of transactions. Posting the latest block of transactions allows Validators to "mine" a Block Reward – currently 12.5 bitcoin (or ~$40,000 at the time of writing).
    你可以认为挖矿是一种经济游戏,它迫使"验证者"在试图将交易添加到记录中时证明自己的价值。为了验证,验证器必须解决一系列复杂的计算难题。首先解决这个难题的贡献者将获得允许发布最新的交易块的奖励。发布最新的交易块允许验证器"挖掘"一块奖励-目前12.5比特币(约合40,000美元在本文撰写时)。
    This process is very secure, but it demands enormous computing power and energy consumption as users essentially "burn money" to solve the computational puzzle that earns them more Bitcoin. The burn-to-reward ratio is so punitive that it is always in Validators' self-interest to post honest transactions to the Bitcoin record.
    这个过程非常安全,但它需要巨大的计算能力和能源消耗,因为用户实际上是"烧钱"来解决计算难题,从而赚取更多的比特币。烧钱与奖励的比例是如此的惩罚性,以至于在比特币记录上公布诚实的交易始终符合验证者的自身利益。

     

    本文由 链话题chaintopic 作者:PI network 发表,其版权均为 链话题chaintopic 所有,文章内容系作者个人观点,不代表 链话题chaintopic 对观点赞同或支持。如需转载,请注明文章来源。

  • jquery里面的$(this)和this都什么时候用,有什么区别

    当你用的是jquery时,就用$(this),如果是JS,就用this
    $(this).html( $(this).html() + " BAM! ");

    这个里的html()是JQUERY方法,用$(this).html(),当然,JS里也有相似方法innerHTML,如果用innerHTML,就要这样写了,这里的reset是JS方法,所以同上得用this.reset():

     1 this.innerHTML(); 2 this.reset(); 

    jquery对象$(this)[0]等同于JS里的元素this,这里的this是一样的,相信你应该看出来了,JS里的元素只要包上$()就是jquery对象了,而jquery的对象只要加上[0]或者.get(0),就是js元素了。

    $(this)是jquery对象,this就是简单指当前元素。jquery对象不能直接指定元素的属性(ele.style),需要get(index)或者直接(index)取得对象中元素才行
    JQuery中的 $() 这个符号,实际上这个符号在JQuery中相当于JQuery(),即$(this)=jquery(this);
    也就是说,这样可以返回一个jquery对象。那么,当你在网页中alert($('#id'));时,会弹出一个[object Object ],这个object对象,也就是jquery对象了。

    那么,我们再回过头来说$(this),这个this是什么呢?假设我们有如下的代码:

     

    $("#desktop a img").each(function(index){
    
          alert($(this));
    
          alert(this);
    
    }

     

    那么,这时候可以看出来:

    alert($(this)); //弹出的结果是[object Object ]
    
    alert(this); //弹出来的是[object HTMLImageElement]

    jQuery中this与$(this)的区别

     

    $("#textbox").hover(
         function() {
                  this.title = "Test";
         },
        fucntion() {
                  this.title = "OK”;
        }
    );

     

    这里的this其实是一个Html 元素(textbox),textbox有text属性,所以这样写是完全没有什么问题的。

    但是如果将this换成$(this)就不是那回事了,Error–报了。this与$(this)的区别在此。

     

    //Error Code:
    $("#textbox").hover(
         function() {
              $(this).title = "Test";
         },
         function() {
              $(this).title = "OK";
         }
    );

     

    这里的$(this)是一个JQuery对象,而jQuery对象沒有title 属性,因此这样写是错误的。

    JQuery拥有attr()方法可以get/set DOM对象的属性,所以正确的写法应该是这样:

    正确的代码:

     

    $("#textbox").hover(
         function() {
              $(this).attr(’title’, ‘Test’);
         },
         function() {
              $(this).attr(’title’, ‘OK’);
         }
    );
  • JS银行卡号码校验算法

    JS银行卡号码校验算法

    function checkBankNum(bankno) {
                var lastNum=bankno.substr(bankno.length-1,1);//取出最后一位(与luhm进行比较)
    
                var first15Num=bankno.substr(0,bankno.length-1);//前15或18位
                var newArr=new Array();
                for(var i=first15Num.length-1;i>-1;i--){
                    //前15或18位倒序存进数组
                    newArr.push(first15Num.substr(i,1));
    
                }
                var arrJiShu=new Array();  //奇数位*2的积 <9
                var arrJiShu2=new Array(); //奇数位*2的积 >9
    
                var arrOuShu=new Array();  //偶数位数组
                for(var j=0;j<newArr.length;j++){
    
                    if((j+1)%2==1){
    //奇数位
                        if(parseInt(newArr[j])*2<9)
                            arrJiShu.push(parseInt(newArr[j])*2);
                        else
                            arrJiShu2.push(parseInt(newArr[j])*2);
    
                    }
                    else //偶数位
                        arrOuShu.push(newArr[j]);
    
                }
    
                var jishu_child1=new Array();//奇数位*2 >9 的分割之后的数组个位数
                var jishu_child2=new Array();//奇数位*2 >9 的分割之后的数组十位数
                for(var h=0;h<arrJiShu2.length;h++){
    
                    jishu_child1.push(parseInt(arrJiShu2[h])%10);
                    jishu_child2.push(parseInt(arrJiShu2[h])/10);
    
                }
    
                var sumJiShu=0; //奇数位*2 < 9 的数组之和
                var sumOuShu=0; //偶数位数组之和
                var sumJiShuChild1=0; //奇数位*2 >9 的分割之后的数组个位数之和
                var sumJiShuChild2=0; //奇数位*2 >9 的分割之后的数组十位数之和
                var sumTotal=0;
                for(var m=0;m<arrJiShu.length;m++){
                    sumJiShu=sumJiShu+parseInt(arrJiShu[m]);
                }
    
                for(var n=0;n<arrOuShu.length;n++){
    
                    sumOuShu=sumOuShu+parseInt(arrOuShu[n]);
    
                }
    
                for(var p=0;p<jishu_child1.length;p++){
    
                    sumJiShuChild1=sumJiShuChild1+parseInt(jishu_child1[p]);
                    sumJiShuChild2=sumJiShuChild2+parseInt(jishu_child2[p]);
    
                }
                //计算总和
                sumTotal=parseInt(sumJiShu)+parseInt(sumOuShu)+parseInt(sumJiShuChild1)+parseInt(sumJiShuChild2);
    
                //计算Luhm值
                var k= parseInt(sumTotal)%10==0?10:parseInt(sumTotal)%10;
                var luhm= 10-k;
    
                if(lastNum==luhm){
                    return true;
                }
                else{
                    return false;
                }
            };
    
  • 银行卡号码校验算法(Luhn算法,又叫模10算法)

    有时候在网上办理一些业务时有些需要填写银行卡号码,当胡乱填写时会立即报错,但是并没有发现向后端发送请求,那么这个效果是怎么实现的呢。

    对于银行卡号有一个校验算法,叫做Luhn算法。

    一、银行卡号码的校验规则

    银行卡号码的校验采用Luhn算法,校验过程大致如下:

    1. 从右到左给卡号字符串编号,最右边第一位是1,最右边第二位是2,最右边第三位是3….

    2. 从右向左遍历,对每一位字符t执行第三个步骤,并将每一位的计算结果相加得到一个数s。

    3. 对每一位的计算规则:如果这一位是奇数位,则返回t本身,如果是偶数位,则先将t乘以2得到一个数n,如果n是一位数(小于10),直接返回n,否则将n的个位数和十位数相加返回。

    4. 如果s能够整除10,则此号码有效,否则号码无效。

    因为最终的结果会对10取余来判断是否能够整除10,所以又叫做模10算法。

    校验算法比较简单,一个python的实现:

    #! /usr/bin/python3
    # -*- coding: utf-8 -*-
     
     
    def luhn(card_num):
        s = 0
        card_num_length = len(card_num)
        for _ in range(1, card_num_length + 1):
            t = int(card_num[card_num_length - _])
            if _ % 2 == 0:
                t *= 2
                s += t if t < 10 else t % 10 + t // 10
            else:
                s += t
        return s % 10 == 0
     
     
    if __name__ == '__main__':
        print(luhn('6226095711989751'))
    

    二、生成符合Luhn规则的银行卡号测试数据

    前面既然摸清了银行卡号的校验规则,那么就可以根据此规则生成一些能够通过Luhn校验的测试数据。

    思路:

    因为最右边的一位是奇数位,奇数位不需要改变值直接放啥就是啥,这个特性很重要,正好可以用来补齐到正好能够整除10。

    所以显然能够推测出生成n位符合Luhn规则的算法:

    1. 随机生成n-1位字符,称为字符串x。

    2. 先假设字符串x有n位(实际上最右边一位缺失是n-1位),将x按照n位长度计算和s,因为最右边第一位是缺失的,忽略跳过,所以计算时最右边一位从2开始。

    3. 上一步得到字符串x的校验和s,将s加上一个数字y,使得它正好可以整除10,这个y就是最右边第一位应该放的数字。

    4. x+y做字符串拼接运算,得到最终的n位符合Luhn规则的字符串。

    #! /usr/bin/python3
    # -*- coding: utf-8 -*-
     
    import random
     
     
    def gen_card_num(start_with, total_num):
        result = start_with
     
        # 随机生成前N-1位
        while len(result) < total_num - 1:
            result += str(random.randint(0, 9))
     
        # 计算前N-1位的校验和
        s = 0
        card_num_length = len(result)
        for _ in range(2, card_num_length + 2):
            t = int(result[card_num_length - _ + 1])
            if _ % 2 == 0:
                t *= 2
                s += t if t < 10 else t % 10 + t // 10
            else:
                s += t
     
        # 最后一位当做是校验位,用来补齐到能够整除10
        t = 10 - s % 10
        result += str(0 if t == 10 else t)
        return result
     
     
    def luhn(card_num):
        s = 0
        card_num_length = len(card_num)
        for _ in range(1, card_num_length + 1):
            t = int(card_num[card_num_length - _])
            if _ % 2 == 0:
                t *= 2
                s += t if t < 10 else t % 10 + t // 10
            else:
                s += t
        return s % 10 == 0
     
     
    if __name__ == '__main__':
        for _ in range(1000):
            random_card_num = gen_card_num('622609', 16)
            valid_result = luhn(random_card_num)
            print('%s %s' % (random_card_num, valid_result))
    
  • 移动端去掉a标签点击时出现的背景

    移动端点击a标签时总是出现一个背景框

    在CSS中添加 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);就可以了


    a:active{

         -webkit-tap-highlight-color: rgba(0, 0, 0, 0);

    }

  • 2019年最新银行BIN码大全JSON数据

    一直在使用的银行BIN码,很全很全,绝对好用。

    已整合成JSON数据,格式如下:

    { "bin": "621098", "bankName": "邮储银行-绿卡通-借记卡" }, { "bin": "622150", "bankName": "邮储银行-绿卡银联标准卡-借记卡" }

    另附带js调用函数一份:
    // 根据银行卡号获取发卡行名称
    getBankName = function (bankCard) {
      if (bankCard == null || bankCard == "") { return "";
      }
     $.getJSON("../../Json/bankData.json", {}, function (data) {
      var bankBin = 0;
      var isFind = false;
      for (var key = 10; key >= 2; key–) {
        bankBin = bankCard.substring(0, key);
        $.each(data, function (i, item) {
             if (item.bin == bankBin) {
                 isFind = true; return item.bankName;
             }
         });
         if (isFind) {
              break;
          }
       }
       if (!isFind) {
           return "未知发卡银行";
       }
      });
    }

    资源获取方式:扫码关注 百讯生活馆 ,回复关键字‘BIN码’即可获取。如遇到图片不显示,请将地址栏https改为http 后访问。

  •  
    
    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
        <title>呼吸灯</title>
        <style type="text/css">
        /* css代码 */
        .breath_light {
        width: 300px;                                    /* 宽度 */
        height: 300px;                                    /* 高度 */
        border:#666 1px solid;
        border-radius:50%;
        opacity: 0.1;                                   /* 不透明度 */
        overflow: hidden;                               /* 溢出隐藏 */
        background:#FF3;                            /* 背景色 */
        margin: 25% auto;                               /* 外边距 */
      
        /* IE10、Firefox and Opera,IE9以及更早的版本不支持 */
        animation-name: breath;                         /* 动画名称 */
        animation-duration: 3s;                         /* 动画时长3秒 */
        animation-timing-function: ease-in-out;         /* 动画速度曲线:以低速开始和结束 */
        animation-iteration-count: infinite;            /* 播放次数:无限 */
     
        /* Safari and Chrome */
        -webkit-animation-name: breath;                 /* 动画名称 */
        -webkit-animation-duration: 3s;                 /* 动画时长3秒 */
        -webkit-animation-timing-function: ease-in-out; /* 动画速度曲线:以低速开始和结束 */
        -webkit-animation-iteration-count: infinite;    /* 播放次数:无限 */
    }
     
    @keyframes breath {
        from { opacity: 0.1; }                          /* 动画开始时的不透明度 */
        50%  { opacity:   1; }                          /* 动画50% 时的不透明度 */
        to   { opacity: 0.1; }                          /* 动画结束时的不透明度 */    
    }
     
    @-webkit-keyframes breath {
        from { opacity: 0.1; }                          /* 动画开始时的不透明度 */
        50%  { opacity:   1; }                          /* 动画50% 时的不透明度 */
        to   { opacity: 0.1; }                          /* 动画结束时的不透明度 */
    }
        </style>
    </head>
    <body>
        <div class="breath_light" title="呼吸灯"></div>
    </body>
    </html>