磁卡YD606的读写

{*******************************************************}
{                                                       }
{       陈新光                                          }
{                                                       }
{       版权所有 (C) 2007 咏南工作室                    }
{                                                       }
{*******************************************************}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SPComm;
type
TForm1 = class(TForm)
btnRead: TButton;
btnWrite: TButton;
edt1: TEdit;
btnClear: TButton;
lbl1: TLabel;
procedure btnClearClick(Sender: TObject);
procedure btnWriteClick(Sender: TObject);
procedure btnReadClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
function RTr2card(comn,inTr2str:pchar):Integer;stdcall;external'rwcommnew.dll';
function WTr2card(comn,inTr2str:string):Integer;stdcall;external'rwcommnew.dll';
implementation
{$R *.dfm}
procedure TForm1.btnClearClick(Sender: TObject);
begin
edt1.Clear;
end;
procedure TForm1.btnWriteClick(Sender: TObject);
begin
if WTr2card('com1',edt1.Text)<>1 then
ShowMessage('error');
end;
procedure TForm1.btnReadClick(Sender: TObject);
var
comm,s:string;
begin
comm := 'com1';
SetLength(s, 1024);
if RTr2card(pchar(comm),pchar(s))<>1 then
ShowMessage('error')
else
edt1.text := s;
end;
end.
可单读、写二或三磁道,也可同时读、写二、三磁。
此例程使用厂家提供的DLL,只对二磁道进行读、写。
2007-10-6 8:26:42
发表评语&raquo;&raquo;&raquo;
2007-10-6 8:29:36    磁卡知识 磁卡知识
磁  卡
 
1、磁卡分类
   磁条型:一般抗磁力卡(300oe)
       高抗磁力卡 (3500oe)
   直接涂印型:低抗磁力卡(300oe) (如:公园门票)
         高抗磁力卡(2700oe)(如:地铁卡、电话卡)
 
2.磁条和磁道
  磁条上有3个磁道。磁道1与磁道2是只读磁道,在使用时磁道上记录的信息只能读出而不允许写或修改。磁道3为读写磁道,在使用时可以读出,也可以写入。
  磁道1可记录数字(0-9)、字母(A-Z)和其他一些符号(如括号、分隔符等),最大可记录79个数字或字母。
  磁道2和3所记录的字符只能是数字(0-9)。磁道2最大可记录40个字符,磁道3最大可记录107个字符。
 
3.磁卡读写器
  一般非金融领域用磁卡,只将信息记录在第2磁道,单2轨的只读阅读器售价400元/台,单2轨的可读可写的读写器售价1800元/台。
  金融领域用磁卡,磁道1、2、3都可能用,如工行用1、3磁道,建行用2、3磁道。1、2、3磁道均可读写的读写器售价4800元/台。
  以上可看出,磁卡的阅读器很便宜,但读写器较贵,由于一般的应用中,磁卡只记录个人帐号等只读信息,使用时并不往卡中写信息,所以很多客户会让我公司出厂时,将信息代写入磁卡中,即“写磁”加工。卡本身在我厂生产的,“写磁”费0.05元/张,卡不在我厂生产的,“写磁”费0.2--0.3元/张。
 
4.磁卡的安全及存在问题
A.卡的保密性和安全性较差
  磁条上的信息比较容易读出,非法修改磁条上的内容也较容易,所以大多情况下磁卡都是作为静态数据输入使用。虽然第3磁道可读写,并且有金额字段,也只是用于小金额的应用领域,例如电话卡。
B.使用磁卡的应用系统需要有可靠的计算机系统和中央数据库的支持
  在金融行业,作为金融交易卡的磁卡,一般配合强大、可靠的计算机网络系统使用,金额、交易记录等信息,均保存在金融机构计算机的数据库中,用户所持的卡片只是提供用户的主帐号等索引信息,便于在数据库中迅速找到用户数据。
 
 
磁卡国际标准
 
1.ISO 7810:1985 识别卡 物理特性
  规定了卡的物理特性,包括卡的材料、构造、尺寸。
  卡的尺寸为:宽度 85.72mm----85.47mm
  高度 54.03mm----53.92mm
  厚度 0.76±0.08mm
  卡片四角圆角半径 3.18mm
  一般讲卡的尺寸为:85.5 X 54 X 0.76
2.ISO 7811-1:1985 识别卡 记录技术 第1部分:凸印
  规定了卡上凸印字符的要求(字符集、字体、字符间距和字符高度)。
3.ISO 7811―2:1985 识别卡 记录技术 第2部分:磁条
  规定了卡上磁条的特性、编码技术和编码字符集。 4.ISO 7811―3:1985 识别卡 记录技术 第3部分:ID-1型卡上凸印字符的位置
5.ISO 7811―4:1985 识别卡 记录技术 第4部分:只读磁道的第1、2磁道位置
6.ISO 7811―5:1985 识别卡 记录技术 第5部分:读写磁道的第3磁道位置
2007-10-6 10:08:10    {*******************************************************}
{                                                       }
{       陈新光                                          }
{                                                       }
{       版权所有 (C) 2007 咏南工作室                    }
{                                                       }
{*******************************************************}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SPComm;
type
TForm1 = class(TForm)
btnRead: TButton;
btnWrite: TButton;
edt1: TEdit;
btnClear: TButton;
lbl1: TLabel;
lbl2: TLabel;
edtCardId: TEdit;
lbl3: TLabel;
edtNum: TEdit;
procedure btnWriteClick(Sender: TObject);
procedure btnReadClick(Sender: TObject);
procedure btnClearClick(Sender: TObject);
private
{ Private declarations }
function FindStr(ShortStr: String; LongStrIng: String): Integer;  //返回子串在字符串中的位置
public
{ Public declarations }
end;
var
Form1: TForm1;
function RTr2card(comn,inTr2str:pchar):Integer;stdcall;external'rwcommnew.dll';
function WTr2card(comn,inTr2str:string):Integer;stdcall;external'rwcommnew.dll';
implementation
{$R *.dfm}
procedure TForm1.btnWriteClick(Sender: TObject);
begin
if WTr2card('com1',edt1.Text)<>1 then
ShowMessage('error');
end;
procedure TForm1.btnReadClick(Sender: TObject);
var
comm,s:string;
i:Integer;
begin
comm := 'com1';
SetLength(s, 1024);                  //必须预先分配内存
if RTr2card(pchar(comm),pchar(s))<>1 then
ShowMessage('error')               //取磁卡存储内容
else
edt1.text := s;
s:=Copy(edt1.Text,1,8);              //取会员卡号(固定为8位,不足8位的前面补0)
edtCardId.Text:=IntToStr(StrToInt(s));
i:=FindStr('42',edt1.Text)-2;        //取会员积分(从第12位始,至'42'子串前两位)
edtNum.Text:=Copy(edt1.Text,12,i-12);
end;
function TForm1.FindStr(ShortStr, LongStrIng: String): Integer;
var
locality: integer;
begin
locality := Pos(ShortStr, LongStrIng);
if locality = 0 then
Result := 0
else
Result := locality;
end;
procedure TForm1.btnClearClick(Sender: TObject);
var
i:Integer;
begin
for i:=0 to ComponentCount-1 do
if Components[i] is TEdit then
(Components[i] as TEdit).Clear;
end;
end. 
原文地址:https://www.cnblogs.com/ghd2004/p/1340716.html