Bonjour à tous !
@Jack, @Klaus
Sujet :- Lors de la création d’un QR Code dans le mode Alphanumérique, le caractère « 0 » n’est pas pris en compte.
Références :- Générateur QR Code DelphiZXingQRCode
- Bug signalé par Yannick ici :
https://panoramic.1fr1.net/t7047-bug-ou-pas-de-kgfDans la méthode FilterContent de la classe TEncoder, La fonction GetAlphanumericCode comporte une erreur :
Ligne erronée :
- Code:
-
CanAdd := GetAlphanumericCode(Ord(Content[X])) > 0;
Ligne corrigée :
- Code:
-
CanAdd := GetAlphanumericCode(Ord(Content[X])) >= 0;
Extrait du fichier dpr : L'erreur est dans la 17ème ligne. J'ai ajouté un commentaire en fin de ligne.
- Code:
-
function TEncoder.FilterContent(const Content: WideString; Mode: TMode;
EncodeOptions: Integer): WideString;
var
X: Integer;
CanAdd: Boolean;
begin
Result := '';
for X := 1 to Length(Content) do
begin
CanAdd := False;
if (Mode = qmNumeric) then
begin
CanAdd := (Content[X] >= '0') and (Content[X] <= '9');
end else
if (Mode = qmAlphanumeric) then
begin
CanAdd := GetAlphanumericCode(Ord(Content[X])) > 0; // Ligne erronée, mettre ">= 0"
end else
if (Mode = qmByte) then
begin
if (EncodeOptions = 3) then
begin
CanAdd := Ord(Content[X]) <= $FF;
end else
if ((EncodeOptions = 4) or (EncodeOptions = 5)) then
begin
CanAdd := True;
end;
end;
if (CanAdd) then
begin
Result := Result + Content[X];
end;
end;
end;