奇偶校验码程序代码

奇偶校验码程序代码,第1张

运行结果一样阿

你是输入的数是什么,让我试一下的看是不一样

不过我觉得这不像是奇偶校验

你这里是输入的都是0,1是吧

之后再分别算行中有奇数个1的行数e

有奇数个1的列的总数f

再输出两个数中较大的一个数作为结果

这叫奇偶校验吗

程序好像没有问题,我想问一下VC是怎么过不了

我没VC,解决不了

直接17位算第18位:

=MID("10X98765432",MOD(SUM(MID(A1,ROW($1:$17),1)2^(18-ROW($1:$17))),11)+1,1)

15位变为18位:

=REPLACE(A1,7,,19)&MID("10X98765432",MOD(SUM(MID(REPLACE(A1,7,,19),ROW($1:$17),1)2^(18-ROW($1:$17))),11)+1,1)

这里的ROW($1:$17) 最好用 ROW(INDIRECT("1:17")) 这样不会因为删除行影响公式。

在工业控制中,Modbus RTU CRC16的校验码用的比较广泛,包括本人富士产品中,PC与伺服电机以及PC与VP系列的变频器的Modbus RTU通讯中都使用到了CRC16

而对CRC16的计算的方式基本上有2种:第一种,使用双循环依照CRC的计算方法进行计算,第二种,采用查表的方式。本人愚钝无比,从网络上搜来的查表法都与实际的正确CRC16的结果有所差异,因此编写了一个小程序供自己使用。

软件的界面很简单,输入诸如“010303020014”的值,然后每2个字符作为一个字节,填入字节数,然后就可以计算出校验码,校验码的多项式为:X16+X15+X2+1

程序界面如下:

实现的源代码如下:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Button1: TButton;

Edit2: TEdit;

Edit3: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Memo1: TMemo;

Label4: TLabel;

function CalCRC16(AData:array of Byte;AStart,AEnd:Integer):Word;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R dfm}

//××××××××××××××××××××××××××

// CalCRC16用于计算Modbus RTU的CRC16

// 多项式公式为X16+X15+X2+1

//××××××××××××××××××××××××××

function TForm1CalCRC16(AData:array of Byte;AStart,AEnd:Integer):Word;

const

GENP=$A001; //多项式公式X16+X15+X2+1(1100 0000 0000 0101)

var

crc:Word;

i:Integer;

tmp:Byte;

procedure CalOneByte(AByte:Byte); //计算1个字节的校验码

var

j:Integer;

begin

crc:=crc xor AByte; //将数据与CRC寄存器的低8位进行异或

for j:=0 to 7 do //对每一位进行校验

begin

tmp:=crc and 1; //取出最低位

crc:=crc shr 1; //寄存器向右移一位

crc:=crc and $7FFF; //将最高位置0

if tmp=1 then //检测移出的位,如果为1,那么与多项式异或

crc:=crc xor GENP;

crc:=crc and $FFFF;

end;

end;

begin

crc:=$FFFF; //将余数设定为FFFF

for i:=AStart to AEnd do //对每一个字节进行校验

CalOneByte(AData[i]);

Result:=crc;

end;

procedure TForm1Button1Click(Sender: TObject);

var

Data:array[0255] of Byte;

i,j,Count:Integer;

Res:Word;

szData:string;

begin

szData:=Form1Edit2Text; //读入欲校验的字符串

Count:=StrToInt(form1Edit3Text); //读入需要计算的字符串长度

i:=1;

j:=0;

for j:=0 to Count-1 do

begin

if (i mod 2)=0 then //每2个字符放入一个字节中

i:=i+1;

if i>=Length(szData) then

exit;

Data[j]:=StrToInt('$'+copy(szData,i,2)); //取出字符并转换为16进制数

i:=i+1;

end;

Res:=CalCRC16(Data,Low(Data),Count-1);

form1Edit1Text:=IntToHex(Res,4);

end;

end

发票校验码在发票上的备注栏查看,增值税普通发票可以用校验码查询发票的真伪,如下图所示:

相关规定

一、增值税普通发票的格式、字体、栏次、内容与增值税专用发票完全一致,按发票联次分为两联票和五联票两种,基本联次为两联,第一联为记账联,销货方用作记账凭证;

第二联为发票联,购货方用作记账凭证。此外为满足部分纳税人的需要,在基本联次后添加了三联的附加联次,即五联票,供企业选择使用。

二、增值税普通发票第二联(发票联)采用防伪纸张印制。代码采用专用防伪油墨印刷,号码的字型为专用异型体。各联次的颜色依次为蓝、橙、绿蓝、黄绿和紫红色。

三、凡纳入“一机多票”系统(包括试运行)的一般纳税人,自纳入之日起,一律使用全国统一的增值税普通发票,并通过防伪税控系统开具。

对于一般纳税人已领购但尚未使用的旧版普通发票,由主管税务机关限期缴销或退回税务机关;经税务机关批准使用印有本单位名称发票的一般纳税人,允许其暂缓纳入“一机多票”系统,以避免库存发票的浪费,

四、增值税普通发票的价格由国家发改委统一制定。

五、各级税务机关要高度重视“一机多票”系统的试运行工作,切实做好新旧普通发票的衔接工作。要掌握情况,统筹布置,合理安排.确保“一机多票”系统顺利推行。

扩展资料:

发票的种类:

普通发票和增值税专用发票。

1、普通发票:主要由营业税纳税人和增值税小规模纳税人使用,增值税一般纳税人在不能开具专用发票的情况下也可使用普通发票。

普通发票由行业发票和专用发票组成。前者适用于某个行业和经营业务,如商业零售统一发票、商业批发统一发票、工业企业产品销售统一发票等;后者仅适用于某一经营项目,如广告费用结算发票,商品房销售发票等。

2、增值税专用发票是我国实施新税制的产物,是国家税务部门根据增值税征收管理需要而设定的,专用于纳税人销售或者提供增值税应税项目的一种发票。

3、专用发票既具有普通发票所具有的内涵。同时还具有比普通发票更特殊的作用。它不仅是记载商品销售额和增值税税额的财务收支凭证。而且是兼记销货方纳税义务和购货方进项税额的合法证明,是购货方据以抵扣税款的法定凭证,对增值税的计算起着关键性作用。

参考资料来源:

百度百科-发票

百度百科——增值税普通发票

以上就是关于奇偶校验码程序代码全部的内容,包括:奇偶校验码程序代码、程序流程图:身份z号码的校验码计算如下、php 实现crc16验证 modbus该如何实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9970096.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存