Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
신용카드 리더기능 구현에 관한 질문
이지체크 같이 신용카드로 긁으면 그 신용카드에 대한 정보를
받아오고 싶은데 어떻게 접근하고 구현해야할지 고수님들의 도움 부탁드립니다..
3
COMMENTS
델파이 탐 크르즈
•
2001.11.08 19:51
김지호 wrote:
> 이지체크 같이 신용카드로 긁으면 그 신용카드에 대한 정보를
> 받아오고 싶은데 어떻게 접근하고 구현해야할지 고수님들의 도움 부탁드립니다..
>
==============================================================================
안녕하세요...
제가 알고있는 바로는
보통의 카드리더기는 PC와 RS232통신을하며 기계끼리는 422또는 485통신을
하는것으로 알고 있습니다...
컴퓨터에 232통신 포트가 있으므로 여기에 물려서 리더기 값을 가지고 오는
방법이죠...
보통 리더기에서 받은 값은 텍스트형식으로 PC에 쌓이게 됩니다.
통신프로그램은 리더기마다 프로토콜값이 있습니다.
요즘나오는 것들은 롬에서 다 명령어를 사용하도록 하지만
간혹다가다 옛날것들은 16진수로 되어있어 변환하여
명령어를 실행해야하는 것들도 있습니다.
예) read 명령이나 write명령들이 있죠...
대게 리더기 들은 바코드나, 마그네틱, RF 가 있죠...
그들의 형식은 대게 이렇습니다.
날짜시간+평션값+카드번호+.....등 이렇게 나가죠...
일단 신용카드리더기 기능에 대해서는 별다른것이 없구여
기계에대한 프로토콜의 값만 알면 모든걸 구현하는데는
별 무리 없을거라 생각 됩니다.
제가 해본 바로는 그렇습니다.
혹시 하시다가 더 의문사항이 생기시면 Q/A에 올리시면
제가 한 소스라도 드리죠...
물론 다른 리더기지만..
도움이 될것 같군요..
그럼 ...
즐코하세요...
0
0
삭제
수정
댓글
김지호
•
2001.11.08 18:18
답변 감사합니다.
말씀하신 소스좀 보내주셨으면 합니다.
제가 통신프로ㅡ램을 처음 만들어 보는것이라..^^;
0
0
삭제
수정
댓글
델파이 탐 크르즈
•
2001.11.08 19:36
김지호 wrote:
> 답변 감사합니다.
> 말씀하신 소스좀 보내주셨으면 합니다.
> 제가 통신프로ㅡ램을 처음 만들어 보는것이라..^^;
===================================================
제가 보내드리는 소스는 그냥 참조만 하시고 리더기가
틀리므로 거기에 맞는 프로토콜로 이용하시기 바람니다.
또한 이것은 제가 했던 리더기에 현재 돌아가고 있는
소스 입니다.
만약 리더기가 같다면 상용으로 쓰시면 저작권법에 접촉이되오니
알아서 쓰시기 바랍니다.
저도 이것 짜면서 맨땅에 헤딩하면서 어렵게 만든것이거든요..
제가 수고한것도 알아주셨으면 하네요.. ^^;
그럼...잘 쓰세요...
참..이것을 쓰실려면 통신 컴퍼넌트를 인스톨해야 합니다.
그냥 참고만 하세요...
방법론을 제시하는 것이니까요.. ^^;
그리고 이건 16진수로 되어있는 것을 Char형으로 변환하여 만든 것입니다.
보시고 욕하지 마세요...
procedure Treadingform.FormActivate(Sender: TObject);
var
port,baud : string;
begin
path := ExtractFilePath(ParamStr(0))+'comm.ini';
ini_file := Tinifile.create(path);
port := ini_file.readstring('port','port','1');
baud := ini_file.readstring('baud','baud','9600');
ini_file.free;
case strToint(port) of
1 : comm1.DeviceName := 'com1';
2 : comm1.DeviceName := 'com2';
end;
case strToint(baud) of
9600 : comm1.baudrate := br9600;
4800 : comm1.baudrate := br4800;
2400 : comm1.baudrate := br2400;
1200 : comm1.baudrate := br1200;
end;
comm1.open;
end;
procedure Treadingform.BitBtn2Click(Sender: TObject);
begin
close;
end;
procedure Treadingform.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
comm1.close;
end;
procedure Treadingform.BitBtn1Click(Sender: TObject);
var mess : array [0..2] of char;
begin
//===통신상태확인====================//
for j := 1 to 1 do
begin
buff[0] := chr($02);
buff[1] := chr(j+$20);
buff[2] := chr($61);
buff[3] := chr($50);
buff[4] := chr($23);
buff[5] := chr($03);
chk := intTohex(((j+$20)+$61+$50+$23+$03),2);
if length(chk) = 3 then
begin
ch1 := copy(chk,2,1);
ch2 := copy(chk,3,1);
end
else if length(chk) = 2 then
begin
ch1 := copy(chk,1,1);
ch2 := copy(chk,2,1);
end;
dat1:=Byte(ch1[1]);
dat2:=Byte(ch2[1]);
buff[6] := chr(dat1);
buff[7] := chr(dat2);
comm1.Write(buff,8);
for i:=0 to 9999999 do
begin
end;
comm1.Read(buff,30);
if byte(buff[4]) = $24 then
mess[j] := 's'
else
mess[j] := 'e';
end;
{ if (mess[1] = 'e') then or (mess[2] = 'e') or
(mess[3] = 'e') then or (mess[4] = 'e') then
begin
showmessage('리더기의 통신상태에 이상이 있습니다.'+#13+
'통신상태를 확인후, 다시 시도하십시오..');
exit;
end}
if (mess[1] = 'e') then //or (mess[2] = 'e') then
begin
showmessage('리더기의 통신상태에 이상이 있습니다.'+#13+
'통신상태를 확인후, 다시 시도하십시오..');
exit;
end
else
button1.click;
end;
procedure Treadingform.Button1Click(Sender: TObject);
var
kunsu,s,sFileName : string;
sum_kunsu,z : integer;
F : TextFile;
begin
path := ExtractFilePath(ParamStr(0))+'comm.ini';
ini_file := Tinifile.create(path);
ea := ini_file.readstring('reader','reader','');
ini_file.free;
BitBtn1.Enabled := false;
BitBtn2.Enabled := false;
Screen.cursor := crhourglass;
sum_kunsu := 0;
for j := 1 to strToint(ea) do
begin
//실제건수 확인
buff[0] := chr($02);
buff[1] := chr(j+$20);
buff[2] := chr($63);
buff[3] := chr($54);
buff[4] := chr($33);
buff[5] := chr($03);
if length(chk) = 3 then
begin
ch1 := copy(chk,2,1);
ch2 := copy(chk,3,1);
end
else if length(chk) = 2 then
begin
ch1 := copy(chk,1,1);
ch2 := copy(chk,2,1);
end;
dat1:=Byte(ch1[1]);
dat2:=Byte(ch2[1]);
if dat1 > $39 then
dat1:=(dat1-55)+$20
else
dat1:=(dat1-$30)+$20;
if dat2 > $39 then
dat2:=(dat2-55)+$20
else
dat2:=(dat2-$30)+$20;
buff[6] := chr(dat1);
buff[7] := chr(dat2);
comm1.Write(buff,8);
for k:=0 to 9999999 do
begin
end;
comm1.Read(buff,23);
kunsu := intTohex((byte(buff[5])-$20),2)+intTohex((byte(buff[6])-$20),2)+
intTohex((byte(buff[7])-$20),2);
sum_kunsu := sum_kunsu + strToint(kunsu);
end;
//--------------------------------------------------------------//
Gauge1.visible := true;
Gauge1.Maxvalue := sum_kunsu;
z := 0;
for j := 1 to strToint(ea) do
begin
//실제건수 확인
buff[0] := chr($02);
buff[1] := chr(j+$20);
buff[2] := chr($63);
buff[3] := chr($54);
buff[4] := chr($33);
buff[5] := chr($03);
chk := intTohex(((j+$20)+$63+$54+$33+03),2);
if length(chk) = 3 then
begin
ch1 := copy(chk,2,1);
ch2 := copy(chk,3,1);
end
else if length(chk) = 2 then
begin
ch1 := copy(chk,1,1);
ch2 := copy(chk,2,1);
end;
dat1:=Byte(ch1[1]);
dat2:=Byte(ch2[1]);
if dat1 > $39 then
dat1:=(dat1-55)+$20
else
dat1:=(dat1-$30)+$20;
if dat2 > $39 then
dat2:=(dat2-55)+$20
else
dat2:=(dat2-$30)+$20;
buff[6] := chr(dat1);
buff[7] := chr(dat2);
comm1.Write(buff,8);
for k:=0 to 9999999 do
begin
end;
comm1.Read(buff,23);
kunsu := intTohex((byte(buff[5])-$20),2)+intTohex((byte(buff[6])-$20),2)+
intTohex((byte(buff[7])-$20),2);
su := strToint(kunsu);
//---------------------------//
//--자료수신 시작----------//
buff[0] := chr($02);
buff[1] := chr(j+$20);
buff[2] := chr($63);
buff[3] := chr($50);
buff[4] := chr($23);
buff[5] := chr($03);
chk := intTohex(((J+$20)+$63+$50+$23+$03),2);
if length(chk) = 3 then
begin
ch1 := copy(chk,2,1);
ch2 := copy(chk,3,1);
end
else if length(chk) = 2 then
begin
ch1 := copy(chk,1,1);
ch2 := copy(chk,2,1);
end;
dat1:=Byte(ch1[1]);
dat2:=Byte(ch2[1]);
buff[6] := chr(dat1);
buff[7] := chr(dat2);
comm1.Write(buff,8);
for k:=0 to 9999999 do
begin
end;
comm1.Read(buff,20);
//-----------------------------//
//----자료수신-----------------//
for i:=1 to su do
begin
Gauge1.progress := Gauge1.progress + 1;
buff[0] := chr($02);
buff[1] := chr(j+$20);
buff[2] := chr($63);
buff[3] := chr($51);
buff[4] := chr($33);
buff[5] := chr($03);
if length(chk) = 3 then
begin
ch1 := copy(chk,2,1);
ch2 := copy(chk,3,1);
end
else if length(chk) = 2 then
begin
ch1 := copy(chk,1,1);
ch2 := copy(chk,2,1);
end;
dat1:=Byte(ch1[1]);
dat2:=Byte(ch2[1]);
buff[6] := chr(dat1);
buff[7] := chr(dat2);
comm1.write(buff,8);
for k:=0 to 9999999 do
begin
end;
comm1.Read(buff,25);
s :=
intTohex((byte(buff[1])-$20),2)+'-'+ //기기번지
intTohex((byte(buff[14])-$20),2)+intTohex((byte(buff[15])-$20),2)+
intTohex((byte(buff[16])-$20),2)+intTohex((byte(buff[17])-$20),2)+
intTohex((byte(buff[18])-$20),2)+intTohex((byte(buff[19])-$20),2)+'-'+
intTohex((byte(buff[13])-$20),2)+'-'+
intTohex((byte(buff[8])-$20),2)+intTohex((byte(buff[9])-$20),2)+
intTohex((byte(buff[10])-$20),2)+intTohex((byte(buff[11])-$20),2)+
intTohex((byte(buff[12])-$20),2);
sFileName := intTohex((byte(buff[1])-$20),2)+
intTohex((byte(buff[14])-$20),2)+intTohex((byte(buff[15])-$20),2)+
intTohex((byte(buff[16])-$20),2)+intTohex((byte(buff[17])-$20),2);
assignFile(F, 'dat'+sFileName+'.dat');
if FileExists('dat'+sFileName+'.dat') then
append(F)
else
rewrite(F);
Writeln(F, s);
CloseFile(F);
z := z + 1;
if z > 1000 then
begin
memo1.clear;
z := 0;
end;
memo1.lines.add(s);
end;
//---자료수신 끝------------//
buff[0] := chr($02);
buff[1] := chr(j+$20);
buff[2] := chr($63);
buff[3] := chr($52);
buff[4] := chr($33);
buff[5] := chr($03);
if length(chk) = 3 then
begin
ch1 := copy(chk,2,1);
ch2 := copy(chk,3,1);
end
else if length(chk) = 2 then
begin
ch1 := copy(chk,1,1);
ch2 := copy(chk,2,1);
end;
dat1:=Byte(ch1[1]);
dat2:=Byte(ch2[1]);
buff[6] := chr(dat1);
buff[7] := chr(dat2);
comm1.Write(buff,8);
for i:=0 to 9999999 do
begin
end;
comm1.Read(buff,23);
//----------------------------//
//---Event 삭제---------------//
buff[0] := chr($02);
buff[1] := chr(j+$20);
buff[2] := chr($63);
buff[3] := chr($53);
buff[4] := chr($33);
buff[5] := chr($03);
if length(chk) = 3 then
begin
ch1 := copy(chk,2,1);
ch2 := copy(chk,3,1);
end
else if length(chk) = 2 then
begin
ch1 := copy(chk,1,1);
ch2 := copy(chk,2,1);
end;
dat1:=Byte(ch1[1]);
dat2:=Byte(ch2[1]);
buff[6] := chr(dat1);
buff[7] := chr(dat2);
comm1.Write(buff,8);
for i:=0 to 9999999 do
begin
end;
comm1.Read(buff,23);
//------------------------------//
end;
Gauge1.progress := 0;
Gauge1.visible := false;
// Panel2.visible := true;
// Button2.click; //자료변환
BitBtn1.Enabled := true;
BitBtn2.Enabled := true;
Screen.cursor := crdefault;
// panel2.visible := false;
end;
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
허수아비
2001.11.08 19:03
0
COMMENTS
/
0
LIKES
질문: 게임 에디트 프로그램에 대하여...
나지영
•
2001.11.08 18:57
1
COMMENTS
/
0
LIKES
답변 감사합니다만.. 그게 아닌데여.. ^^;
독학생
•
2001.11.08 23:27
소스가 엄다 그얘기져? 실행파일만 가지구두 가능한데여... 같은 실행파일에 버젼만 바꿔서 머에 쓰실라...
런던여우
2001.11.08 13:05
0
COMMENTS
/
0
LIKES
소스분석좀 해주세요..keybd_event(VK_SnapShot,..
델초보
2001.11.08 10:24
0
COMMENTS
/
0
LIKES
브라우저실행시한글이깨져요.
극초
•
2001.11.08 09:01
1
COMMENTS
/
0
LIKES
인터베이스테이블의 동적생성 방법좀...
성더기
•
2001.11.08 22:39
인터베이스 IBConsole을 실행하시면 Interactive SQL이라구 쿼리문을 실행할 수 있는 창이 뜹니다 거기...
김지호
•
2001.11.08 08:53
3
COMMENTS
/
0
LIKES
신용카드 리더기능 구현에 관한 질문
이지체크 같이 신용카드로 긁으면 그 신용카드에 대한 정보를 받아오고 싶은데 어떻게 접근하고 구현해야할지 고수님들의 도움 부탁드립니다..
델파이 탐 크르즈
•
2001.11.08 19:51
김지호 wrote: > 이지체크 같이 신용카드로 긁으면 그 신용카드에 대한 정보를 > 받아오고 싶은데 어떻...
김지호
•
2001.11.08 18:18
답변 감사합니다. 말씀하신 소스좀 보내주셨으면 합니다. 제가 통신프로ㅡ램을 처음 만들어 보는것이라.....
델파이 탐 크르즈
•
2001.11.08 19:36
김지호 wrote: > 답변 감사합니다. > 말씀하신 소스좀 보내주셨으면 합니다. > 제가 통신프로ㅡ램을 처...
정세운
•
2001.11.08 07:51
1
COMMENTS
/
0
LIKES
DBGird에서 질문이 있습니다..
나그네
•
2001.11.08 17:45
DBGrid1.Columns[2].Width := 20; or Table1.FieldByname('Field1').DisplayWidth := 20; 정세운 wrot...
초보
•
2001.11.08 07:46
1
COMMENTS
/
0
LIKES
TDataBase에서..
pej
•
2001.11.10 06:40
Defaults 버튼을 클릭하면 Alias에서 User, Password을 제외한 셋팅을 읽어들입니다. 저의 경우는 여러...
green15
2001.11.08 06:50
0
COMMENTS
/
0
LIKES
스트링 그리드 안에서 tap활용?
김종석
2001.11.08 06:25
0
COMMENTS
/
0
LIKES
핸들이 없는 컴퍼넌트에 핸들속성을 주는방법이 있나요?
언제나초보
•
2001.11.08 05:56
1
COMMENTS
/
0
LIKES
FileListBox에서 특정값으로 커서이동하는법???
최용일
•
2001.11.08 06:09
안녕하세요. 최용일입니다. ItemIndex속성을 이용하세요... FileListBox1.ItemIndex := FileList...
나지영
•
2001.11.08 05:37
1
COMMENTS
/
0
LIKES
질문: 프로그램 버전을 수정해야 하는데..
초보
•
2001.11.08 05:59
델파이 4에서는 PROJECT메뉴의 OPTIONS..를 보면 버전INFO란 탭이 있는데 여기서 버전을 바꾸면 되는게 ...
허수아비
2001.11.08 05:34
0
COMMENTS
/
0
LIKES
게임 에디트 프로그램..
껍데기
2001.11.08 05:30
0
COMMENTS
/
0
LIKES
델파이 실행 파일인데요..그리드에 한글이 ##으로 나옴니다
이분희
•
2001.11.08 04:34
2
COMMENTS
/
0
LIKES
버튼의 활성화에 대해서.. 어떻게 할지 모르겠읍니다.
이분희
•
2001.11.08 18:46
나 ??? 무 야 !!!
cane
•
2001.11.08 05:31
델파이 데모에 보시면 예제가 있습니다.. CoolStuf 폴더에 예제를 참조해서 만드시면 되겠네여 즐코하...
정원교
•
2001.11.08 04:24
7
COMMENTS
/
0
LIKES
RS232제어할때 API의 DCB구조체 제어
델파이 탐 크르즈
•
2001.11.08 19:56
정원교 wrote: > 안녕하세요. > 델파이의 델자도 모르는 울트라 초짜입니다. > 이전분이 델파이로 RS232...
정원교
•
2001.11.08 21:11
답변해 주신분들 정말 감사합니다. 우선 지금 RS232를 기준으로 해서 작성되었던 플그림인데요. 상황이 ...
델파이 탐 크르즈
•
2001.11.09 00:15
정원교 wrote: > 답변해 주신분들 정말 감사합니다. > 우선 지금 RS232를 기준으로 해서 작성되었던 플그...
정원교
•
2001.11.09 00:25
관심 가져 주셔서 정말 감사합니다. ^^ 예 지금 상황이 기존의 설비는 컴과 장비(원칩보드)의 거리가 가까...
최용일
•
2001.11.08 06:28
안녕하세요. 최용일입니다. RS232통신은 해본적은 없지만... DCB구조체의 Flags멤버에 들어있네요......
정원교
•
2001.11.08 20:42
답변해 주신분들 정말 감사합니다. 우선 지금 RS232를 기준으로 해서 작성되었던 플그림인데요. 상황이 ...
정원교
•
2001.11.08 20:38
답변해 주신분들 정말 감사합니다.
조언자
2001.11.08 03:52
0
COMMENTS
/
0
LIKES
소켓으로 배열 보내기 효과적인 방법
궁금이
•
2001.11.08 03:10
2
COMMENTS
/
0
LIKES
프로그램실행중 설정한사항적용되도록
이성훈
•
2001.11.08 03:54
파일을 이용하면 되지 않을까요? 로그화면에서 입력한 값을 파일에 저장하고 다시 실행할때 그 값을 읽어...
궁금이
•
2001.11.08 09:12
이성훈 wrote: 님 우선 답변 너무 감사해요~~ 근데..제가 파일처리방식은 아직 안해봐서요.... 그냥 간...
서영택
•
2001.11.08 02:41
1
COMMENTS
/
0
LIKES
인터베이스에서도 UNION 이 가능한가요(내용무)
성더기
•
2001.11.08 22:43
서영택 wrote: > 인터베이스에서도 UNION 이 가능한가요
jung
2001.11.08 02:10
0
COMMENTS
/
0
LIKES
Form 이 줄어들어여... ㅡㅡ;
김지호
2001/11/08 08:53
Views
388
Likes
0
Comments
3
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 이지체크 같이 신용카드로 긁으면 그 신용카드에 대한 정보를
> 받아오고 싶은데 어떻게 접근하고 구현해야할지 고수님들의 도움 부탁드립니다..
>
==============================================================================
안녕하세요...
제가 알고있는 바로는
보통의 카드리더기는 PC와 RS232통신을하며 기계끼리는 422또는 485통신을
하는것으로 알고 있습니다...
컴퓨터에 232통신 포트가 있으므로 여기에 물려서 리더기 값을 가지고 오는
방법이죠...
보통 리더기에서 받은 값은 텍스트형식으로 PC에 쌓이게 됩니다.
통신프로그램은 리더기마다 프로토콜값이 있습니다.
요즘나오는 것들은 롬에서 다 명령어를 사용하도록 하지만
간혹다가다 옛날것들은 16진수로 되어있어 변환하여
명령어를 실행해야하는 것들도 있습니다.
예) read 명령이나 write명령들이 있죠...
대게 리더기 들은 바코드나, 마그네틱, RF 가 있죠...
그들의 형식은 대게 이렇습니다.
날짜시간+평션값+카드번호+.....등 이렇게 나가죠...
일단 신용카드리더기 기능에 대해서는 별다른것이 없구여
기계에대한 프로토콜의 값만 알면 모든걸 구현하는데는
별 무리 없을거라 생각 됩니다.
제가 해본 바로는 그렇습니다.
혹시 하시다가 더 의문사항이 생기시면 Q/A에 올리시면
제가 한 소스라도 드리죠...
물론 다른 리더기지만..
도움이 될것 같군요..
그럼 ...
즐코하세요...