24位长整数的模数?

时间:2016-09-23 11:57:52

标签: javascript node.js

我需要计算24位长整数(IBAN checksum)的模数,但JS计算错误。

例如为: 700901001234567890131400%97 = 90

但是在JS(V8)中它是38。

如何计算JS中的模数

4 个答案:

答案 0 :(得分:7)

我认为您链接的文档已经说明了您应该做的事情:

  

如果使用的应用程序软件无法处理此大小的整数,则可以以分段方式执行模运算。

     

分段计算D mod 97可以通过多种方式完成。其中一种方法如下:

     
      
  1. 从D的最左边数字开始,使用前9位数字构建一个数字并将其称为N. [注3]
  2.   
  3. 计算N mod 97。
  4.   
  5. 通过将上面的结果(步骤2)与D的下一个7位数连接起来构造一个新的9位数N.如果D中剩余的数字少于7位但至少有一位,那么构造一个新的N,它将具有小于9位,从上面的结果(步骤2)开始,接着是D
  6. 的剩余数字   
  7. 重复步骤2-3,直到处理完D的所有数字   步骤2中的最终计算结果将是D mod 97 = N mod 97。
  8.   

答案 1 :(得分:2)

它可能比人们想象的更难。 确保javascript句柄号为整数是非常棘手的(它通常将它们存储为float,但并非总是如此)。

其他人已经建立了库来处理JS中的IBAN检查。 例如,请查看https://github.com/arhs/iban.js

答案 2 :(得分:1)

javascript中可以表示的最大数字是2 ^ 53 - 1.它们是64位浮点值。所以最大的数字是9007199254740991。

大于9007199254740991的数字不能以正常方式计算。因此,要找到这么大数量的模数,你必须把它分解成碎片。

例如。 700901001234567890131400可分为700901001234567和890131400。

首先找到700901001234567的模数。 700901001234567%97 = 13 现在加入第二个数字13890131400的13前面并找到这个数字的模数 13890131400%97 = 90

答案 3 :(得分:0)

我最近遇到过这个问题,这看起来像霍纳的方法[https://en.wikipedia.org/wiki/Horner%27s_method]

可以解决的问题
<div class="fm-link-block__grid">
            <div class="row">
            <?php if( have_rows('home-section-modeling') ): ?>
            <?php while( have_rows('home-section-modeling') ): the_row(); 
              $home_section_modelling_image = get_sub_field('home-modeling-image');
              $home_section_modelling_description = get_sub_field('home-modeling-description');
              $home_section_modelling_title = get_sub_field('home-modeling-title');
            ?>

                <div class="col-sm-4">
                    <div class="v-align-container">
                        <div class="v-align-grid">
                            <?php if( $home_section_modelling_description ): ?>
                                <p><?php echo $home_section_modelling_description ?></p>
                            <?php endif; ?>
                        </div>
                    </div>
                </div>
                <div class="col-sm-8">
                    <div class="fm-link-block-image">
                        <a href="#">
                            <?php if( $home_section_modelling_image ): ?>
                            <img alt="modelling-image" src="<?php echo $home_section_modelling_image['url'];  ?>">
                            <?php endif; ?>
                            <h2>
                                <?php if( $home_section_modelling_title ): ?>
                                <span><?php echo $home_section_modelling_title ?></span>
                                <?php endif?>
                                <i>
                                    <img alt="arrow icon"  src="<?php echo get_stylesheet_directory_uri(); ?>/images/link-arrow.svg">
                                </i>
                            </h2>
                        </a>
                    </div>
                </div>
                <?php endwhile; ?>
                <?php endif; ?>

            </div>
            <div class="fm-link-block-head"> MODELLING </div>
        </div>

除非我不完全理解这个问题,否则上面的代码应该有效。