ããã«ã¡ã¯ãä¼å¡äºæ¥é¨ãã¸ãã¹éçºã°ã«ã¼ãã®é«ç°ã§ãã
ã¯ãã¯ãããã¯ä»å¹´ãæ ªä¸»åªå¾ å¶åº¦ã¨ãã¦ããã¬ãã¢ã ãµã¼ãã¹ä¸å¹´éç¡æã¯ã¼ãã³ãè´åãã¾ãããæ¬ã¨ã³ããªã§ã¯ã¯ã¼ãã³ã³ã¼ããæã¡ééãã¦ãæå³ããä»ã®äººã®ã¯ã¼ãã³ã³ã¼ãã使ç¨ããã®ãé²ãããã«å·¥å¤«ãã話ããç´¹ä»ãã¾ãã
ã¯ããã«
ã¯ã¼ãã³ã³ã¼ãã¯å ¥åã®ãããããåªå ãã¦æ°åã ãã®æååã«ãã¾ãããã¯ãã㯠rand é¢æ°ã使ã£ã¦çæãããã¨ãã¦ããã®ã§ãããæ°åã®æã¡ééããé åºééãã§ãæå³ãã誤使ç¨ãã¦ãã¾ãã®ãé²ãããã«ãã§ãã¯ãµã ãå ããã®ããããã¨ååããå©è¨ããããã¾ããã
ããã¤ã調ã¹ã¦è¦ãã¨ãããLuhn ã¢ã«ã´ãªãºã ãä¸è¨ãæºããã¦ããã®ã§å©ç¨ãããã¨ã«ãã¾ããã
Luhn ã¢ã«ã´ãªãºã ã®å©ç¨
Luhn ã¢ã«ã´ãªãºã ã¨ã¯ã誤ãæ¤åºã®ããã®ãã§ãã¯ãµã 符å·ã§ã1 æ¡ã®ééããé£æ¥ããæ°åã®é åºééããæ¤åºã§ããã¨ããç¹å¾´ãããã¾ããæ¤è¨¼ã®æé ã¯æ¬¡ã®éãã§ãï¼Wikipedia ããå¼ç¨ï¼ã
- å³ç«¯ã®ãã§ãã¯ãã£ã¸ããã1çªç®ã¨ãã¦ãå¶æ°çªç®ã®æ¡ã2åã«ããã
- 2åã«ãã¦ããªãæ¡ãå«ããåæ°åã®ç·åãæ±ããï¼2åã«ããæ¡ã2æ¡ã«ãªã£ãå ´åã¯ããããããå¥ã ã®æ°åã¨ãã¦å ããï¼ã
- ãã®ç·åã®ä¸1æ¡ã0ãªãï¼ã¤ã¾ãã10ã§å²ãåããå ´åï¼ããã®çªå·ã¯Luhnã¢ã«ã´ãªãºã ã§ã¯æ£ãããããã§ãªãå ´åã¯æ£ãããªãã
71894 ãä¾ã«æ¤è¨¼ããã¨ã
- 7 2 8 18 4
- 7 + 2 + 8 + 1 + 8 + 4 = 30
- 30 㯠10 ã§å²ãåãã
ãªã®ã§æ£ãããã¨ãªãã¾ãã
Ruby ã«ã¯ luhn-ruby ã¨ãã gem ãåå¨ããã®ã§ããã¡ãã®å®è£ ãèªãã æ¹ãåãããããããç¥ãã¾ããï¼luhn-ruby ã®å®è£ ï¼ããªãããã®ã¢ã«ã´ãªãºã ã¯ã¯ã¬ã¸ããã«ã¼ãçªå·ã«ã使ããã¦ãã¾ãã
å®éã«ä½¿ç¨ãã Ruby ã®ã³ã¼ãã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
require 'luhn' def generate_coupon_code(length) number = Array.new(length - 1) { rand(10) }.join number + Luhn.checksum(number).to_s end
ãã®ããã«ãããã¨ã§ãé£æ¥ããæ°åã®é åºãå ¥ãæ¿ãã£ãæ°åæååï¼ä¾ãã° 71984ï¼ã¯çæããã«ãããªãã¾ãããã¾ãã1 æ¡ã®æ°åãå¤æ´ãããã¨ã§ã¯ã¼ãã³ã³ã¼ããäºæ¸¬ãããã¨ãã§ããªããªãã¾ããã
ãããã«
æ¬ã¨ã³ããªã§ã¯ãLuhn ã¢ã«ã´ãªãºã ã使ã£ã¦ãã§ãã¯ãµã ãå ãããã¨ã§ãã¯ã¼ãã³ã³ã¼ãã®æã¡ééããé²ãã 話ããç´¹ä»ãã¾ãããç§èªèº«ã¯ããã§ãã¯ãµã ãå ãããã¨ã§æ¯è¼çå®å ¨ã«æ°åæååãçæã§ããã¨ããç¥èããªãã£ãã®ã§ãåå¼·ã«ãªã£ãåºæ¥äºã§ããã