힘내쿠우
April 4, 2023, 3:02am
1
안녕하세요.. 전문을 만들어보고 있는데요.
위의 사진에서 “실 동의자료 Data (Binary 모드)” 를 전문에 어떻게 담아야 하는지 궁금합니다
실 동의자료는 pdf 파일로 되어 있습니다.
검색을 해보고 저번에도 이곳에 질문을 했을 때
아래와 같은 방법으로 해봤었습니다.
binaryData = System.IO.File.ReadAllBytes(filePath);
하지만 이 방법은 아닌 것 같아서 질문 다시 드립니다..
=================
해당 전문을 필요한 업체에 문의를 해서 아래와 같은 답변을 얻었습니다.
==================
동의자료(예: PDF) 파일을 그대로 EI13 13번 필드에 Write 하시면 됩니다.
EI13에 동의자료를 그대로 붙인다고 생각하시면 됩니다.
Java를 사용해서 개발한다고 생각하면,
PDF 파일을 File 객체로 읽어서 Byte를 값을 EI13에 그대로 복사하신다고 생각하시면 됩니다.
========================
위 내용의 경우를 c# 으로 구현을 한다면,
byte binaryData;
try
{
// Read the file as binary data
binaryData = System.IO.File.ReadAllBytes(filePath);
// Convert binary data to a single-line string
string binaryString = BitConverter.ToString(binaryData).Replace("-", "");
// 이진 데이터를 문자열 배열에 담기
agreeDatas[i] = binaryString;
i++;
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
이런 식으로 해주는게 맞을까요? System.IO.File.ReadAllBytes 이 메소드로 byte 값을 가져오고, BitConverter.ToString(binaryData).Replace(“-”, “”) 이 메소드를 사용해서 문자열 1줄로 만들어서 전문에 포함시키면 될까요??
1 Like
문자열 가져와서 인코딩한 바이트 배열을 넣으면 안되나요?
1 Like
dimohy
April 4, 2023, 3:44am
3
Mode에 따른 규칙이 있을 것 같습니다. X는 보통 헥사코드(바이너리 형태를 헥사 형태로 표현하는 것)를 의미하긴 하는데, 비고에 Binary 모드라고 되어있어서 모호하긴 합니다. 아마도 각 Mode에 따른 규칙 설명이 있을 것입니다.
1 Like
힘내쿠우
April 4, 2023, 3:47am
4
네 … base64 로 인코딩해서 할 경우 안되더라구요
1 Like
힘내쿠우
April 4, 2023, 3:48am
5
이런 식으로 data를 담아서 전문을 만드는 규칙만 있구요…
binary 모드가 정확히 무엇인지는 문서에 없네여…
1 Like
dimohy
April 4, 2023, 3:54am
6
전문의 형태로 봤을 때는 바이너리 데이터는 아닌 것 같습니다. 아마도 예시 샘플이 있을텐데 제공받지 못했을까요? (확률적으로는 헥사 코드일 가능성이 높아 보입니다.)
1 Like
힘내쿠우
April 4, 2023, 4:06am
7
예시 샘플은 제공받지 못했습니다, 답변 보고 바로 예시 샘플 문의 넣었네요!!
헥사 코드라고 한다면… 어떤 부분을 검색해서 찾아보면 될까요?
===== 검색을 해보니 아래와 같은 내용이 나오는데요… BitConverter 라는 메소드를 이용하면 되는 것일까요?
// convert byte array from file to hex values
public static string ConvertByteToHex(byte[] byteData)
{
string hexValues = BitConverter.ToString(byteData).Replace(“-”, “”);
return hexValues;
}
1 Like
궁금한게 있는데요, DataBlock1의 905를 제외하고 나머지는 1024로 채우던가 마지막 블록에는 빈칸으로 1024개 채워서 만드신건 맞으시죠?
1 Like
힘내쿠우
April 4, 2023, 4:27am
9
넵 맞습니다
FILLER 항목 길이 계산 : (1024 - (119 + 동의자료 길이) MOD 1024)) MOD 1024
반칸으로 채우는 FILLER 를 위와 같은 수식으로 계산해서 채웠어요…
1 Like
데이터 가져오는건 System.IO.File.ReadAllBytes(filePath); 이 맞을것같고, 앞에 식별정보를 어떻게 만드느냐가 중요할것같은데… 식별정보는 어떻게 만드셨나요? 문자열로 만들고 바이트 배열로 변환하신건가요?
1 Like
힘내쿠우
April 4, 2023, 4:45am
12
아뇨 식별정보의 경우 아래 사진에 있는 내용으로 문자열 만들었어요
식별정보는 아래처럼 문자열로 만들었어요
AE1112220000001 9966910448 48100002222 0201005901786310 202304041pdf 0077454
그리고나서 이 식별정보 문자열 다음에 pdf 파일을 bytes 로 변환해서 붙여줘야 합니다…
그래서
// Read the file as binary data
binaryData = System.IO.File.ReadAllBytes(filePath);
// Convert binary data to a single-line string
string binaryString = BitConverter.ToString(binaryData).Replace("-", "");
이 소스 코드 사용했어요
1 Like
식별자가 119글자가 되어야하는데 적어주신건 76자네요. 혹시 중간에 자르신건가요?
2 Likes
아아 이해했습니다.
첫번째 헤더가 있고, 각 문서들마다 문서의 속성을 서술하는 식별자가 있네용
2 Likes
힘내쿠우
April 4, 2023, 4:55am
15
예 맞습니다! 식별자 119 글자는 빈공간까지 포함해야해서 그 부분은 확인했더니 119 글자 맞습니다, 문제는 이제 식별자 뒤에 파일을 byte 변환한 값을 붙여줘야하는데 ㅜㅜ 제대로 한 것 같은데도 전문이 잘못 만들어졌다고 결과값이 오네여
2 Likes
제가 보기에는 pdf를 bitconverter로 변환안하고 그냥 그대로 보내면 될듯싶은데요…
그래야 받는입장에서 사이즈만큼 데이터를 잘라서 pdf로 역직렬화하여 파일을 만들기만하면 되니깐요ㅎㅎ
2 Likes
혹시 파일 한개 기준으로 보내신 데이터 전문은 생략하고 볼 수 있을까요?
2 Likes
힘내쿠우
April 4, 2023, 5:28am
18
그냥 그대로 보낸다는게 혹시 이러너 말일까요??
=====
byte[] binaryData;
binaryData = System.IO.File.ReadAllBytes(filePath);
string strPdfbinaryData = "";
foreach (byte b in binaryData)
{
strPdfbinaryData += b.ToString();
}
System.IO.File.ReadAllBytes 이 메소드 사용해서 pdf 파일을 byte 배열로 변환하고,
bytes 배열에 있는걸 반복문으로 byte를 뽑아서 문자열에 합쳐주는게 맞을까요?
2 Likes
힘내쿠우
April 4, 2023, 5:29am
19
보낸 데이터 전문은 생략하고 볼 수 있게 한다는 말이 무슨 말인지 이해를 못 하겠습니다 ㅜㅜ
1 Like
제가 잘못 말씀드렸네요ㅎㅎ ‘동의 자료 데이터’ 빼고 결과값을 보고 싶었습니다.
2 Likes
힘내쿠우
April 4, 2023, 5:39am
21
AE1112110000000202304049966910448 0000001 / 여기까지가 head record 구요. AE1112220000001 9966910448 48100002222 0201005901786310 202304041jpg 0002614 이건 data record
입니다!
2 Likes