发票生成器

按发票代码与号码的位数、金额与税率、价税合计三者的换算关系,排出一张票面的样式示例,并把价税合计自动写成人民币大写。结果仅供对照排版,不具有法律效力。

不含税金额1000.00 元
税额(13%)130.00 元
价税合计1130.00 元
大写金额壹仟壹佰叁拾元整
发票代码:1100153130    发票号码:12345678    开票日期:2026-10-01
发票类型:增值税专用发票(代码 10 位 / 号码 8 位)

购买方名称:示例科技有限公司
纳税人识别号:91350100M000100Y43
地址、电话:(专票必填,本页为样式示例,不填具体内容)
开户行及账号:(专票必填,本页为样式示例,不填具体内容)

货物或应税劳务、服务名称:技术服务费
数量:1    单价:1000.00    金额:1000.00    税率:13%
税额:130.00

价税合计(大写):壹仟壹佰叁拾元整
价税合计(小写):¥1130.00
合计金额:1000.00    合计税额:130.00

销售方名称:柳泉示例销售方(虚构)
※ 本票面为样式示例,不具有法律效力,不能用于报销、入账或抵扣。

提示:在任一输入框里按 Enter 即可重新生成;票面里的发票代码、号码、销售方名称都是固定的演示值,不对应任何真实票据;金额、税率、购买方名称三项改动后,税额与价税合计会立刻跟着变。

使用方法

  1. 「发票类型」默认选增值税专用发票,对应 10 位发票代码;切换成增值税普通发票后,票面上的代码位数会变成 12 位,必填项也会相应减少。
  2. 「购买方名称」默认是「示例科技有限公司」;「购买方纳税人识别号」默认填 91350100M000100Y43,这是一串能在本地通过 18 位统一社会信用代码校验位算法的示例。
  3. 「货物或应税劳务、服务名称」示例填「技术服务费」,「数量」填 1,「金额(不含税)」填 1000.00,「税率」选 13%。
  4. 点「生成发票示例」。工具按 税额 = 金额 × 税率 算出 130.00 元,再按 价税合计 = 金额 + 税额 得到 1130.00 元,并把价税合计写成大写「壹仟壹佰叁拾元整」。
  5. 把「金额」改一改,比如填 884.96,税额会变成 115.04 元、价税合计 1000.00 元——同一组数字从另一个方向验证了上面两条公式。
  6. 点「复制文本」把票面按纯文本复制走,粘进记事本逐项核对字段是否齐全;点「载入默认示例」可随时回到上面这组默认值。

这个发票生成器能解决什么问题

一是价税分离的反复核算。开票前最常被问的一句话是「这 1130 元里有多少是不含税金额」,用 1130 ÷ 1.13 得到 1000.00、税额 130.00;反过来把不含税金额乘一遍税率,也能立刻校验对方给的数字对不对。

二是开票信息字段对照。专票要求购买方四项齐全(名称、纳税人识别号、地址电话、开户行及账号),普票在企业抬头下通常只要名称与纳税人识别号两项。切一下「发票类型」,票面上的字段栏会跟着变,用来确认手上资料是否够用。

三是税率档位试算。同一笔 1000.00 元的不含税金额,按 13%、9%、6%、3%、1%、0% 六个档位分别算出 1130.00、1090.00、1060.00、1030.00、1010.00、1000.00 六个价税合计,报价与合同比对时不用逐个手算。

四是大写金额核对。纸质票面上「价税合计(大写)」写错一个字就要作废重开,本页把 1130.00 直接写成「壹仟壹佰叁拾元整」,元位、角位、分位和「整」字的规则都按票面习惯处理。

本页不做这些事:不生成真实票据、不调用任何税务接口、不校验纳税人识别号在税务系统中的真伪、不处理差额征税与农产品核定扣除这类特殊计税,也不涉及个人所得税。票面是版式示意,不具有法律效力,不能用于报销、入账或抵扣。

生成原理:价税分离、位数结构与必填项

① 具体公式只有两条。税额 = 金额(不含税)× 税率,价税合计 = 金额 + 税额;反向则先用 金额 = 价税合计 ÷ (1 + 税率) 求金额,再用 税额 = 价税合计 − 金额 求税额。这个发票生成器把两条公式固化成唯一的计算路径,不做任何列名改写。增值税是典型的价外税:价格本身不含税,税额单独列示,购买方支付的是「价 + 税」,所以价税合计一定大于金额。相对地,消费税是价内税,税额已经含在价格里,价格与税额不并排列示,这也是两类税在票面上写法不同的根源。

② 为什么换算全部换成「分」做整数。IEEE 754 双精度下 0.1 + 0.2 等于 0.30000000000000004,直接拿「元」做浮点乘除,末位会在几厘之间飘。本页先把金额乘 100 变成整数分,13% 就等价于乘 13 再除 100:amtCents = Math.round(totalCents × 100 ÷ 113),税额 taxCents = totalCents − amtCents。整条链路只发生一次 Math.round 取整,误差不会逐次累积,也保证「金额 + 税额」恒等于价税合计,不会出现差一分钱对不上的情况。

③ 位数结构:代码与号码共同构成唯一键。发票号码是 8 位数字,单张代码下的号码空间就是 108 = 100000000 个;发票代码在增值税专用发票上是 10 位、在增值税普通发票上是 12 位,其中编码了开票地区与印制年份等信息(各票种的具体位数分配以当年税务总局公告为准)。把「代码 + 号码」合起来看,用 10 位代码时理论上能区分的票据是 1010 × 108 = 1018 种,这也是为什么票面上必须同时打印代码和号码。

④ 纳税人识别号为什么是 18 位。企业抬头用的是统一社会信用代码,共 18 位,遵循 GB 32100-2015;第 18 位是校验码,算法是 ISO 7064:1983 MOD 31-3。可用字符表共 31 个——数字 0~9 加大写字母,并剔除容易看错的 I、O、S、V、Z;前 17 位各自的权重依次是 1、3、9、27、19、26、16、17、20、29、25、13、8、24、10、30、28。把前 17 位按权重加权求和、对 31 取模并做 31 减余数,就得到第 18 位。工具对税号做格式硬校验(必须 18 位且字符都在表内),但校验位不匹配时只给黄色提示、不拦截——因为很多演示数据里的税号本来就是编的。

⑤ 大写金额的生成路径。把价税合计的分值拆成「元」和「角分」,元部分按四位一组从低位往高位切分成万、亿、万亿三级,每一组内映射到 零壹贰叁肆伍陆柒捌玖 加 拾佰仟,组与组之间补「万」「亿」。规则上有三处容易写错:连续零只写一个「零」(1005 是「壹仟零伍」而不是「壹仟零零伍」)、最低位的零不写(1130 是「壹仟壹佰叁拾」而不是「壹仟壹佰叁拾零」)、角分全为零时末尾加「整」(1130.00 是「壹仟壹佰叁拾元整」)。角位为零而分位不为零时,中间要补一个「零」,例如 100.05 写作「壹佰元零伍分」。

⑥ 专票与普票的必填项差别。专票的开票信息是四项:名称、纳税人识别号、地址与电话、开户行及账号,四项都指向购买方,缺一项就不能开;普票在企业抬头下一般只要名称与纳税人识别号两项。至于能不能抵扣进项税,专票(不属不得抵扣情形时)可以,普票一般不可以——这是两类票最本质的业务区别,和票面排版无关。

完整示例(数值仅作演示)

发票生成器在默认条件下的示例,与页面打开时的默认值完全一致:增值税专用发票、购买方「示例科技有限公司」、税号 91350100M000100Y43、项目「技术服务费」、数量 1、金额 1000.00、税率 13%。

再换一组更容易出错的值验证一遍:把「金额」改成 884.96、税率保持 13%,税额得 884.96 × 13% = 115.0448 → 115.04 元,价税合计 884.96 + 115.04 = 1000.00 元;反过来说,含税 1000.00 元的商品在 13% 下的不含税金额就是 884.96 元,两句话说的是同一件事。若税率换成 9%:1000.00 元的金额对应税额 90.00 元、价税合计 1090.00 元。

最后看一组大额:含税 1000000.00 元、13% 时,不含税金额为 884955.75 元、税额 115044.25 元、大写「壹佰万元整」。位数越长越能看出分位取整的影响——这也是本页坚持用整数分运算的原因。

税率档位、反算与必填项对照表

下表固定不含税金额 1000.00 元,列出六个档位各自的税额与价税合计,税额一律按分四舍五入:

税率 / 征收率不含税金额税额价税合计价税合计大写常见适用
13%1000.00130.001130.00壹仟壹佰叁拾元整销售货物、加工修理修配劳务、有形动产租赁
9%1000.0090.001090.00壹仟零玖拾元整交通运输、建筑、不动产租赁与销售、农产品等
6%1000.0060.001060.00壹仟零陆拾元整现代服务、生活服务、金融、增值电信
3%1000.0030.001030.00壹仟零叁拾元整小规模纳税人征收率
1%1000.0010.001010.00壹仟零壹拾元整小规模纳税人阶段性减征
0%1000.000.001000.00壹仟元整出口货物、跨境应税行为

第二张表是专票与普票的必填项对照,用来判断手上资料够不够开票:

票面信息项增值税专用发票增值税普通发票(企业抬头)增值税普通发票(个人抬头)
购买方名称必填(全称)必填(全称)可不填
纳税人识别号必填(18 位)必填(18 位)不填
地址、电话必填可不填不填
开户行及账号必填可不填不填
能否凭票抵扣进项税符合条件可抵扣一般不可抵扣不可抵扣

第三张表按 13% 把常见的含税金额反算成不含税金额与税额,前 12 行默认展示,剩余 3 行可以展开,也能整表导出:

价税合计(含税)不含税金额税额(13%)价税合计大写
100.0088.5011.50壹佰元整
200.00176.9923.01贰佰元整
500.00442.4857.52伍佰元整
1000.00884.96115.04壹仟元整
1130.001000.00130.00壹仟壹佰叁拾元整
2000.001769.91230.09贰仟元整
5000.004424.78575.22伍仟元整
10000.008849.561150.44壹万元整
11300.0010000.001300.00壹万壹仟叁佰元整
20000.0017699.122300.88贰万元整
50000.0044247.795752.21伍万元整
100000.0088495.5811504.42壹拾万元整
113000.00100000.0013000.00壹拾壹万叁仟元整
226000.00200000.0026000.00贰拾贰万陆仟元整
1000000.00884955.75115044.25壹佰万元整

输入范围、边界与精度说明

下面这些范围是这个发票生成器刻意设定的边界,知道它们能避免你把票面示例当成真实票据来用:

常见问题

生成的票面能拿去报销吗?

不能,也不要用。本页输出的只是一段按行列对齐的文本,既没有发票监制章、二维码和密码区,也没有真实代码与号码,不具有法律效力,不能用于报销、入账或抵扣。它的用途是核对字段是否齐全、验算金额与税额,而不是产出票据。

发票上的「金额」到底是含税还是不含税?

增值税票面里,「金额」列是不含税的,另有一列「税额」,「价税合计」才是含税的总额。三者满足 价税合计 = 金额 + 税额。把含税价直接填进税额公式(含税 × 税率)会多算 13%,这是最常见的错误;正确做法是先用 含税 ÷ (1 + 税率) 还原出金额。

13% 和 9% 该选哪个?

看的是销售的是什么,不是看购买方是谁。销售货物、加工修理修配劳务、有形动产租赁一般是 13%;交通运输、建筑、不动产租赁与销售、农产品等是 9%;现代服务、生活服务、金融、增值电信是 6%。小规模纳税人按征收率 3% 计算,阶段性减征期间可适用 1%。同一张票上不同税率的项目要分行填列,不能合并成一个金额。

专票和普票在必填项上差在哪里?

专票要求购买方四项齐全:名称、纳税人识别号、地址与电话、开户行及账号;普票在企业抬头下一般只要名称与纳税人识别号两项。业务上真正的区别是专票可以凭票抵扣进项税、普票一般不可以,必填项多出来的两项正是为了配合抵扣与对公结算。

纳税人识别号为什么是 18 位?校验位怎么来的?

企业抬头用的是统一社会信用代码,18 位,遵循 GB 32100-2015,最后一位校验码按 ISO 7064:1983 MOD 31-3 计算:前 17 位各乘一个固定权重后求和,对 31 取模,再用 31 减余数,映射回 31 个字符表(数字 0~9 与大写字母,剔除 I、O、S、V、Z)。示例里的 91350100M000100Y43 正好能通过这步校验。

0%、免税和不征税,票面上有什么不一样?

0% 是税率为零,属于征税范围,税额栏写 0.00,相关进项仍在抵扣链条内;免税也属于征税范围,但依法免征,对应的进项不得抵扣;不征税不在征税范围内,税额栏为空。三者都不能简单等同于「不用交税」,不能凭税额为零就互相套用。

为什么金额和税额相加会差一分钱?

因为两条算法路径不同。用「税额 = 金额 × 税率」时,先对金额取整再乘税率,再取整一次;用「税额 = 价税合计 − 金额」时只取整一次。两处取整叠加,就会出现 1 分的差异——实测 13%、含税 1.00~2000.00 元区间约有 11.5% 的金额会这样。本页统一用后者,保证票面上金额加税额恒等于价税合计。

填进去的开票信息会被上传吗?

不会。税额计算、大写转换、票面排版全部在当前页面完成,没有任何网络请求,也不写浏览器存储。想自己验证,打开开发者工具的 Network 面板,连点几次「生成发票示例」,可以看到没有新请求发出。不过也提醒一句:真实开票信息属于敏感数据,任何在线工具都不适合用来存放它。

相关工具