每个奇数和偶数位置分块一个字符串
Posted
技术标签:
【中文标题】每个奇数和偶数位置分块一个字符串【英文标题】:Chunk a string every odd and even position 【发布时间】:2011-09-19 02:36:33 【问题描述】:我对javascript一无所知。
假设字符串“3005600008000”,我需要找到一种方法,将奇数位置的所有数字乘以 2,偶数位置的数字乘以 1。
我写的这个伪代码输出(我认为)对于奇数(即“0”)为 TRUE,
var camid;
var LN= camid.length;
var mychar = camid.charAt(LN%2);
var arr = new Array(camid);
for(var i=0; i<arr.length; i++)
var value = arr[i]%2;
Alert(i =" "+value);
我不确定这是对的:我不相信它会在奇数(甚至后来)位置对字符串进行分块/拆分。
我该怎么做?你能提供一些提示吗?
/=================================================/
我的目标是在网页中实现智能卡 ID 号的验证例程。
我试图实现的逻辑如下:
· 1) 从左边开始,奇数位全部乘以2,偶数位全部乘以1。
· 2) 如果一位数乘以 2 的结果是两位数(例如“7 x 2 = 14”),则将结果的位数相加以产生一个新的一位数结果(“1+4=5”)。
· 3) 将所有个位数的结果加在一起。
· 4) 校验位是您必须添加到此结果中的数量,才能达到下一个最高的十倍数。例如,如果第 3 步中的和为 22,则要达到 10 的下一个最大倍数(即 30),您必须将 8 与 22 相加。因此校验位为 8。
这就是整个想法。 Google 搜索智能卡 ID 验证没有返回任何结果,我开始认为在 Javascript 中执行此操作有点矫枉过正......
欢迎任何输入。
【问题讨论】:
我很困惑。这是否有效? 在我看来,这个循环每次都会输出 TRUE,因为警报包含一个变量赋值(到一个字符串),这将打破你的循环,因为我将不再迭代到 arr.length。似乎您对 javascript 的了解远不止于此;)。检查我的答案以获得有效的解决方案 【参考方案1】:我发现我正在尝试做的事情称为 Luhn 验证。
我在这里找到了一个算法。
http://sites.google.com/site/abapexamples/javascript/luhn-validation
感谢您花时间帮助我。非常感谢。
【讨论】:
【参考方案2】:var theArray = camid.split(''); // create an array entry for each digit in camid
var size = theArray.length, i, eachValue;
for(i = 0; i < size; i++) // iterate over each digit
eachValue = parseInt(theArray[i], 10); // test each string digit for an integer
if(!isNaN(eachValue))
alert((eachValue % 2) ? eachValue * 2 : eachValue); // if mod outputs 1 / true (due to odd number) multiply the value by 2. If mod outputs 0 / false output value
【讨论】:
【参考方案3】:看起来您可能正在构建 Luhn 验证。如果是这样,请注意您需要从字符串的右侧而不是左侧计算奇数/偶数。
【讨论】:
以上是关于每个奇数和偶数位置分块一个字符串的主要内容,如果未能解决你的问题,请参考以下文章
java编写将一串字符串中的奇数位提出来相加并且偶数位每个数相加
CodeForces - 1251C (思维+贪心+归并排序)