특정 일련번호에 대하여 전체 ASCII 코드값에 대한 odd parity 를 적용함,
즉, 시리얼 넘버(9자리의 16진수) 값의 parity 에 따라 "0" 또는 "1" 을 붙임..
예) 000000019(0)
00000007F(1)
000000096(1)
000000262(1)
()안에 있는것이 홀수 패리티 값..
이걸 함수로 만들어야 하는데 ㅡㅡ; 하다하다 머리가 딸려서 못하겠습니다.
될듯 말듯 하다 오류나고...
간단하게 할수 있는 방법이 있으면 조언좀 부탁드립니다.
홀수 패리티 계산하는것은 아주 간단합니다. 2진수로 표시했을때 1로 셋팅된 비트의 갯수를 세어서 홀수면 0, 짝수면 1로 패리티를 셋팅하시면 됩니다.
예를 들어서 아스키 '0'은 십진수 48, 십육진수 $30입니다. 이진수로 표시하면 0110 0000B이죠. 패리티를 세면 2, '1'은 십진수 49, 십육진수 $31, 이진수 0110 0001B, 패리티 3, '9'는 십진수 57, 십육진수 $39, 이진수 0110 1001B, 패리티 4
000000019는 패리티가 2 2 2 2 2 2 2 3 4 이고 합은 21 이므로 홀수 패리티는 0
<!--CodeS-->
function OddParity(const Source: string): string;
const
ParityCounts: array[0..15] of Integer = (
0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4);
var
Index, Count: Integer;
begin
Result := '0';
Count := 0;
for Index := 1 to Length(Source) do
begin
Inc(Count, ParityCounts[Byte(Source[Index]) and $0F]);
Inc(Count, ParityCounts[(Byte(Source[Index]) and $F0) shr 4]);
end;
if (Count mod 2) = 0 then
Result := '1';
end;
procedure TfrmPWMain.Button1Click(Sender: TObject);
const
Source: array[0..3] of string = ('000000019', '00000007F', '000000096', '000000262');
var
Index: Integer;
begin
for Index := 0 to 3 do
ShowMessage('Source: ' + Source[Index] + ' Parrity:' + OddParity(Source[Index]));
end;
<!--CodeE-->
^^ 항상 즐코하세요...