最近工作涉及計算條形碼第 13位校驗位批量更改, AI、條碼打印機、條碼掃描器等軟件內置生成校驗位,網上搜索也找了條碼生成器,但對我們來說不夠靈活,編寫了一個小程序 計算校驗位
OK 先看看PHP版的,跟網上搜索到的簡單了不少
function en13($code)
{
$tmp1=0;
$tmp2=0;
for($i=0;$i<12;$i++)
{
if($i % 2==0)
$tmp1+=substr($code,$i,1);
else
$tmp2+=substr($code,$i,1);
}
return (10-($tmp2*3+$tmp1)%10)%10;
}
//測試 www.2cto.com
$t="6939762911740";
echo en13($t);
function en13($code)
{
$tmp1=0;
$tmp2=0;
for($i=0;$i<12;$i++)
{
if($i % 2==0)
$tmp1+=substr($code,$i,1);
else
$tmp2+=substr($code,$i,1);
}
return (10-($tmp2*3+$tmp1)%10)%10;
}
//測試
$t="6939762911740";
echo en13($t);
還有要把MSSQL數據庫中的數據批量更新 就不寫程序了 直接在sql企業管理器裡更新
T-SQl代碼
declare @str as varchar(15)
declare @tmp as varchar(30)
declare @t1 as int
declare @t2 as int
declare @i int
set @t1=0
set @t2=0
set @str='6939762911740'
set @i=1
while @i<=12
begin
if @i % 2=0
begin
set @t1=@t1+substring(@str,@i,1)
end
else
begin
set @t2=@t2+substring(@str,@i,1)
end
set @i=@i+1
end
set @tmp=(10-(@t1*3+@t2)%10)%10
--end function
SELECT @t1 ,@t2,@tmp
declare @str as varchar(15)
declare @tmp as varchar(30)
declare @t1 as int
declare @t2 as int
declare @i int
set @t1=0
set @t2=0
set @str='6939762911740'
set @i=1
while @i<=12
begin
if @i % 2=0
begin
set @t1=@t1+substring(@str,@i,1)
end
else
begin
set @t2=@t2+substring(@str,@i,1)
end
set @i=@i+1
end
set @tmp=(10-(@t1*3+@t2)%10)%10
--end function
SELECT @t1 ,@t2,@tmp www.2cto.com
ENA-13校驗碼的計算方法代碼位置序號代碼位置序號是指包括校驗碼在內的,由右至左的順序號(校驗碼的代碼位置序號為1)。 計算步驟校驗碼的計算步驟如下:a.從代碼位置序號2開始,所有偶數位的數字代碼求和。b.將步驟a的和乘以3。c.從代碼位置序號3開始,所有奇數位的數字代碼求和。d.將步驟b與步驟c的結果相加。e.用大於或等於步驟d所得結果且為10最小整數倍的數減去步驟d所得結果,其差即為所求校驗碼的值。示例:代碼690123456789X1校驗碼的計算見表1。 表1 校驗碼的計算方法步 驟 舉 例 說 明 1.自右向左順序編號 位置序號 13 12 11 10 9 8 7 6 5 4 3 2 1 代碼 6 9 0 1 2 3 4 5 6 7 8 9 X 2.從序號2開始求出偶數位上數字之和① 9+7+5+3+1+9=34 ① 3. ①*3=② 34×3=102 ② 4.從序號3開始求出奇數位上數字之和③ 8+6+4+2+0+6=26 ③ 5. ②+③=④ 102+26=128 ④ 6.用大於或等於結果④且為10最小整數倍的數減去④,其差即為所求校驗碼的值 130-128=2校驗碼X1=2
摘自 Tao2581 日常小記