MAKStripe USBplus and MAKStripe USB

MAKStripe is available in two versions:
  • MAKStripe USB - Magneticcard reader and writer to be connected to the USB port of a PC or PDA with USB host.
  • MAKStripe USBplus - In addition to MAKStripe USB - also portable Magneticcard reader, writer and data logger.

Makstripe USB

MAKStripe USB is a 3-track LoCo/HiCo reader and LoCo magnetic stripe card writer/encoder. The connection of the device to a PC is made through a free USB port. Due to the head with three tracks, all three tracks of a card can be read or written at the same time. Magnetic stripe cards can have a bit density between 1 and 210 BPI (75 BPI, 210 BPI and also other non ISO densities), which are all supported by MAKStripe USB.

MAKStripe USB is connected directly to the USB port of a PC. No external power supply is required.

The raw data are digitalized and transferred direct to the PC, where the analysis is performed. Due to the direct reading / writing, opportunities are given, which are not available with usual readers/writers.

MAKStripe USB is controlled with the software "MAKStripeExplorer" for Windows NT / 2000 / XP / Vista, Linux, Windows Mobile 5/6 and Mac OS X operating system, which is supplied with MAKStripe USB.


MAKStripe USB is connected to a PC through the USB port. The software MAKStripeExplorer runs on any PC with minimal resolution 1024 x 768, a free USB-port and on which Windows NT / 2000 / XP / Vista or Linux with a recent Gnome/KDE GUI are installed. MAKStripeExplorer can also be installed on a PocketPC with ARM CPU PXA2xx, VGA 640x480 and USB Host. Further MAKStripeExplorer runs also on Mac OS X.


Supported Operating Systems

MAKStripe USB is driven with the software "MAKStripeExplorer", which is supplied with MAKStripe USB and is working on following operating systems:

Windows NT / 2000 / XP / Vista

Linux with a recent Gnome/KDE GUI

PocketPC with Windows Mobile 5/6, ARM CPU PXA2xx, VGA 640x480 and USB Host

Mac OS X

With MAKStripe USB we do supply all versions of the Software MAKStripeExplorer for Windows, Linux, for PocketPC with Windows Mobile 5/6. and for Mac OS X.

If a older operating system like Windows 95/98 is used and the connection of the magneticstripe reader / writer to the parallel port of a PC is desired, we do recommend MAKStripe R2TAO Parallel Port, which is described and can be ordered here.

The data, saved on any of the above operating systems is fully portable and compatible to the other operating systems, so for example data acquired on Linux operating system can be transferred and processed further on Windows and vice versa.

MAKStripeExplorer on Windows

MAKStripeExplorer running on Windows

MAKStripeExplorer on Linux

MAKStripeExplorer running on Linux

MAKStripeExplorer  running on Mac OS X

MAKStripeExplorer running on Mac OS X

MAKStripeExplorer unter Windows Mobile 5/6 mit PocketPC

MAKStripeExplorer running on PocketPC with Windows Mobile 5/6

We would like to emphasize following remarks for MAKStripeExplorer, running on PocketPC. MAKStripe USB does take the necessary power directly from the PocketPC, so no external power supply is needed. The power, taken from the PocketPC is in Idle/Reading mode approx. 50mA and in Writing Mode : approx. 300mA. MAKStripeExplorer for PocketPC has been tested on a Fujitsu/Siemens n560 PocketPC. Due to the small display available for MAKStripeExplorer on PocketPC, the buttons have not a full description, but do contain only the necessary amounts of letters, so they could fit on the screen. There are also no ToolTips and there is no Help-System for the PocketPC version of MAKStripeExplorer. The disposition of the buttons and their functionality are identical with the versions of MAKStripeExplorer for Windows or Linux.

MAKStripeExplorer running on a  Fujitsu/Siemens n560 PocketPC

MAKStripeExplorer running on a Fujitsu/Siemens n560 PocketPC

Available Languages

The software "MAKStripeExplorer" for Windows NT / 2000 / XP / Vista, for Linux and for Mac OS X, the manuals and the help systems, available on the CD, supplied with MAKStripe USB are available both in English and in German language.

MAKStripeExplorer with German language

MAKStripeExplorer with German Language

Reading Magnetic Stripe Cards

Start the software MAKStripeExplorer and press the "Scan Port for Data" button or the function key F5.

Software for MAKstripe USB - MAKStripeExplorer

MAKStripe Explorer is now in Scanning - Mode and expecting a card to be swiped. During each swipe the data are read and displayed. The Scanning - Mode can e stopped by pressing the "Stop Scanning" button or the function key F12.

The software will read all 3 tracks from the card, the real bit rate and swipe-speed through the whole swipe process of the magnetic stripe card are estimated. The data are demodulated according the F2F modulation and displayed. If ANSI or BCD character sets are detected, the software will decode the data and check the parity and the LRC check sum. If both parity and LRC are "OK" (green) then the data has been read correctly - otherwise a new swipe has to be performed.

The display is given with the ALFA or BCD character set (in case, such data is present).

or in binary form

Software for MAKstripe - Magnetic Stripe Card Reader Writer

or in ISO standard

To save the data, select the "Save" command from the "File" menu. The data will be saved in original form "as is" with the complete swipe characteristics. Even if the data is in a non-standard format, it will be saved correctly.

Swipe Speed

The swipe speed, with which usually a magnetic stripe card is being swiped is in the range between 20 and 50 cm/s. In this swipe speed range, the data is decoded error free with highest probability.

Depending on the quality, with which the magnetic stripe card has been written, its age and condition, it is often possible to read the magnetic stripe card successfully with a very low swipe speed ...

... or a very high swipe spped.

The minimum swipe speed in the first example is only 7 cm/s at the start of the card and the maximum swipe speed in the second case is 140 cm/s at the card end.

Signal Analysis

MAKStripe USB offers, as a direct magnetic stripe card reader, advanced signal analysis options far beyond the technical opportunities of a normal magnetic card reader.

In case of magnetic stripe card readers, which do contain a decoder chip, the data will be decoded and the signal will be submitted time delayed through two data lines (data and clock) to the PC, where further processing is performed.

Beyond the usual data decoding, the exact signals on a magnetic stripe card can be read, and with the graphical representation of this data you can identify in one look the data modulation, signal quality, and various schemes of non-standard tracks, that are used for authentication purposes.

MAKStripe USB submits the digitalized data in real time to the PC, the real bit density and also the swipe speed during the entire time interval of swiping of the magnetic stripe card can be estimated.

Although it is reasonable to expect that the swipe speed is constant during the whole process, the swipe speed is in the beginning rising and after a period of acceleration it reaches a relative constant value.

The reason here fore is that after the magnetic stripe card has touched the magnetic head, the swiping speed decreases rapidly for a short period of time until the magnetic head has raised and taken its correct place on the card. Afterwards the speed is increasing and the continuous swipe speed is reached at approximately 60%.

Every magnetic stripe card reader/writer is unique. The bit density differs at the beginning and the end of the card. Knowing this fact, it is possible to examine if the tracks of the magnetic stripe cards have been written with one and the same magnetic stripe card reader / writer, in single or multiple swipes, or with different writers.

Also a analysis of the quality of the written data is possible.

Here some typical examples:

This are data from a magnetic stripe card, written with a high quality writer. Both tracks have been written in one swipe. A difference can hardly be noticed.

In this case the first track is written in the first swipe, the second track is written in a separate swipe. It can be noticed that both tracks have been written on the same magnetic card writer model. The two tracks are almost parallel.

Tracks 2 and 3 have been written in one swipe. Track 1 has been written afterwards on a different magnetic card writer.

With MAKStripe USB and the software "MAKStripeExplorer", every single tick, bit or character with the flux direction, its size in microseconds, and its position can be analysed. By selecting in the "Signal Analysis" menu a part of the data, available on a track, by left clicking and moving with the mouse, all details for the selected data will be displayed.

In order to eliminate noise and HF (radio waves) interference, the trigger level for the Analog -> Digital converter is several micro volts above 0V. For this reason when reading data from the card, the Flux1 length will be shorter then the Flux 0 length, or the opposite may take place depending on the direction the card was swiped.

If the card is older, and the magnetic field is week, this effect will be more noticeable.

The length difference will also be different for different swipe speeds and bit density. If you swipe the card with a higher speed, the signal will be stronger then if you swipe the card with a lower speed.

The F2F modulation method, mostly used in magnetic cards applications, enables to write the data and clock together on the magnetic card. In this modulation a magnetic flux reversal between two clock cycles ( a tick) will mean a logical "1" and if such a magnetic flux reversal is missing, it represents a logical "0".

The track data contains two tick duration sizes, the first smaller size for the "1 bits" and the second larger size for the "0 bits".

The tick duration for the "0 bits" is two times longer then the tick duration for the "1 bits".

In the Tick_Nr. / Tick_duration graphic, the Ticks are grouped in two streams. The first represents the "1 bit" ticks, the second the "0 bit" ticks.

The two data groups in one stream are the "Flux"0" and "Flux 1" Ticks, the length difference as described before, is clearly noticeable.

On a week signal the "Flux0" and "Flux 1" duration difference is much larger.

This card is also read error free, but it is much more error sensitive on too slow or too high swipe speeds.

With the Tick Nr. / Tick duration graphic, immediately the type of data on the track, and its quality can be seen.

A F2F modulation will have two data streams. But a track modulated with the more rarely used MFM (Modified Frequency Modulation) would contain 3 data streams.

With the MFM modulation (also referred as MNRZb1, Miller Code and Delay Modulation DM) the data density is doubled without increasing the magnetic transition density.

This is achieved by using 3 tick duration sizes. A 1 bit cell tick, a 1.5 bit cell tick and a 2 bit cell tick.

If you would swipe such a card in a normal magnetic card reader containing a F2F decoding IC, you would only get a error message without knowing what has produced it. With MAKStripe USB you can exactly see what data is on the card.

A other example of a non-standard track is this track from a magnetic card used in a German company.

It shows a very elegant copy protection method. In the lead-in data the "Flux 0" Tick duration are much larger then the "Flux 1" ticks. After the data starts (first 1 bit) , the data stream continues with a normal F2F modulation. This anomaly can not be noticed with a normal magnetic card reader, and also not be written with a normal magnetic card writer. A card written with this track on a normal magnetic card writer, would seem like a correct copy on that reader / writer, but it would not contain the correct lead-in sequence.

Not only that MAKStripe USB shows exactly every tick duration, it is also capable to make a exact copy of this track.

With the software "Magnetic-Stripe Card Explorer", the read data can be saved / written in RAW format, as they have been read out. No data and properties are lost.

Due to the RAW mode it is also possible to develop various copy protection schemes, to use and copy them.

For example, after the data end with the LRC (Longitudinal Redundancy Check), there are written up to 60 bits "0" until the cards end. In part - or also in the data part - a very simple but effective copy protection scheme with the use of a simple magnetic flux reversals could be implemented.

For example with a simple "lost" magnetic flux reversal, you would make a undefined und unrecognisable area in the F2F modulation.

A normal reader and / or writer would not be able to recognise this hole, but it would see this undefined area as a distortion in the swiping procedure and would ignore it. MAKstripe USB could identify this card without errors.

It is technically not possible to read or copy such a magnetic flux reversal sequence with a normal magnetic card reader and / or writer containing a decoder / encoder IC.

The copied magnetic card would have the same data as the original and would be seen as a successfully copy. But the whole or other magnetic flux reversal would not be present on the card.

MAKStripe USB is capable to read this and other total non-standard tracks in RAW mode, to save them, and to write them later to other magnetic stripe cards. The copy would be 100% the original.

Data Analysis

In the "Data Analysis" tab, the data which have been read / loaded can be analysed. When displaying the data, the exact start position and the character size can be selected, so the parity for each bit group and the LRC from the start to the current position will be displayed.

Using this analysis possibilities, identification of the bit size of unknown character sets and analysis of possible errors can be performed.

For example on this magnetic card from a German company, the identical data sequences are written 3 times.

Every data sequence ends with the valid LRC and is followed by a two "00000" bit groups (parity is wrong) as separation data between the data sequences.

These 2*2=4 "00000" are reproducing 4 parity errors.

After the analysis we know that the data has been read correctly, even there are 4 parity errors present.

On a other card we have seen a very simple method to confuse normal software, by inserting several bits before the actual data starts. This data stream can not be normally identified, because the start sequence is not "Start Sentinel". You can examine and identify such data by skipping several bits by changing the analysis start bit.

Data Generation

For data generation, the "Write Tracks" tab is selected. Using the "Character-Set" Combo-Box, the desired character set is chosen. Characters are entered in the In the "Data" field. If "Allow ALFA/BCD only" is checked, only characters according to the appropriate standards can be entered. The start of the text is marked with a "Start Sentinel", fields are separated with "Field Separators" and at the end, "End Sentinel" and "LRC" are inserted by pressing the appropriate buttons.

In the "Data Properties" section, the number of charcters on a track, character set, track density in Bits Per Inch, total number of bits on a track, bits before data, bits in data and bits after data will be shown. The parameters character set, total number of bits, bits before data and bits after data are displayed as recognized, but can also be changed by the user.

If the "AutoCalc Properties" checkbox is enabled, these parameters will be recalculated and displayed in "Data Properties" while each new character is beeing entered. If this checkbox is disabled, then the "Calc Properties" button is enabled and by pressing it, the recalculation is done manually.

After entering data has been finished, the track, to which the data should be saved, has to be selected by clicking on the appropriate radio-button. By clicking on the "Save" button, the entered data will be transferred to the selected track. The typed characters will automatically be converted in upper case according to the standard. The generated data can be saved in MAG format by selecting "Save" in the "File" menu or in ASCII format by clicking on the "Save TXT" button. According to this procedure, data can be generated for all three tracks of a magnetic-stripe card.

Saving the generated data in MAG format (Save option in the File menu) does save all data of all three tracks in a special binary format, while saving in TXT format saves only the data of the selected track in ASCII format. Accordingly loading data in MAG format loads all three tracks. If importing of ASCII data is desired, then by pressing the "Load TXT" button, ASCII data will imported and shown in the "Data" field, where they can be modified and saved to a track by selecting the desired track and pressing the "Copy" button.

Data Modification / Editing

The most easy way to modify data is available in the "Write Tracks" tab. In this tab all available tracks of data which have been scanned, generated or loaded from a MAG file, are displayed. Selecting the track, which will be edited by clicking on the appropriate radio button and pressing afterwards the "Edit" button, the characters are transferred to the "Data" field, where modification can be made. The process of transferring characters from a track to the "Data" field can also be performed by double-clicking the left mouse button on the track which shall be modified.

After the data have been modified, they can be returned to the track where they came from by double clicking on the "Data" field. If the transfer to another track is desired, then this is performed by clicking on the appropriate radio-button and afterwards on the "Save" button.

In the following example, the data from track 1 have been copied to the "Data" field by double-clicking on them. After modification, track 3 has been selected as new destination by pressing selecting the third radio button. By pressing the "Save" button, the modified data from track 1 have been transferred to track 3.

Using the procedure, described above, easy and fast modification of characters can be performed. If unusual editing of characters or ticks is desired - for example for creation of security cards, which cannot be read with other hardware, then the "Signal Analysis" tab can be selected.

In the "Signal Analysis" tab, addition sophisticated opportunities for changing and modifying of each character and even of each separate tick is available.

If "Work on Characters" is selected, by left-clicking on a character, the opportunity is given to change the select character or to insert new characters after the selected character.

By selecting "Work on Ticks" and left-clicking on a tick, the tick can be deleted, the length can be modified or new ticks inserted after the selected tick. So it is possible to work on a very detailed level in order to perform any desired modification.

Writing Tracks with MAKStripe USB

MAKStripe USB is able to write to LoCo magnetic stripe cards. In each writing procedure one, two or three tracks can be written - in any desired bit density, modulation and character set. MAKStripe USB is controlled directly by the software MAKStripeExplorer, and it depends only on the software what can be done.

LoCo magnetic stripe cards are the most used magnetic stripe cards, as for example cash cards, credit-cards, identification cards, etc. MAKStripe USB is not suitable for writing HiCo magnetic stripe cards, which are rarely used - in industry buildings and at airports, where strong magnetic fields exist, which could damage the magnetic stripe card.

Because the data are written by MAKStripe USB direct - without using a encoder chip - it is possible to write exactly defined data to the card, with a defined start, data stream and end. For copy protection purposes also characters with inverted parity can be written and modulations used, which do not comply to any norm.

Through the input of various parameters, influence on the bit density and also the size of single bits can be undertaken. So writing of tracks with any desired properties can be performed.

Also fully unknown data, not depending on the used character sets and modulation, can be read, analysed and written on other magnetic stripe cards.

Writing a customized magneticstripe card is performed with two swipes. The swipe speed and characteristic is determinated by making a reference swipe before the write swipe. Both swipes should have the same swipe speed. Due to this reason, for writing to a card, there must be some data at least on one track of the destination card, which can be used as reference. Therefore if writing to a blank card is desired, there must previously be written some temporary data to this destination card. This process, called formatting a reference track is performed by pressing the "Format" button or F7 function key and swiping the destination card through MAKStripe USB. The destination card which will be formatted, has to be swiped through MAKStripe USB during the time period given in the "Duration" field. The formatting process is in fact a process of writing a simple 0 bit data stream to the selected track(s) for calibration purposes. Formatting will be performed on all tracks for which the checkoxes of "To be Processed" have been selected. It is necessary that at least one track is formatted - which track is irrelevant. After at least one track has been formatted, the writing process can be performed.

If there are already some data on any track of the destination card, then it is not necessary to perform formatting as described in the previous paragraph. In such a case MAKStripe USB will accept the existing data as a reference track for calibration.

Direct Copy

The process of direct copying is performed in two swipes. During the first swipe the source card is read and during the second swipe, the data are written to the destination card.

First the original magnetic-stripe card has to be scanned. The scan process is started by pressing the "Scan Port for Data" button or the function key F5. After a card has been swiped, the "Direct Copy" button in the "Write Tracks" tab will be enabled and the data, available on the scanned card will be displayed. All checkoxes of "To be Processed" will be selected, which means that all three tracks will be copied.

Pressing the "Direct Copy" button and swiping a formatted card or even a old card containing any data through MAKStripe USB , will result in an exact copy of the original card. When a card is swiped through Makstripe USB, the raw data from the last swipe remains in the internal buffer. With "Direct Copy" this raw data is written to a other card "AS IS", without any analysis or modification.

If all checkoxes of "To be Processed" are selected, empty tracks of the original card will also result in empty tracks on the destination card. Using "Direct Copy", beside copying all three tracks, it is also possible to copy selected tracks of the source card to the destination cards - in such a case, the appropriate checkoxes of "To be Processed" have to be selected and the unwanted tracks have to be deselected. In the example on the following picture, the scanned card has data on track 1 and track 2. Track 3 is empty. If all checkboxes are checked, a exact copy will be made with data on tracks 1 and 2 and a empty track 3. On the other side, if for example checkox 1 an 3 are unchecked, only track 2 will be transferred to the destination card - tracks 1 and 3 would be left on the destination card unchanged. If the checkbox for track 3 - which is empty on the source card in this example - would be checked, then track 3 on the destination card would be erased.

Writing Custom Tracks

Pressing the "Write" button or the F8 kunction key, starts the writing process of the tracks for which checkoxes of "To be Processed" are selected. If the "Auto Adjust Data" checkbox is selected, the data will be optimized before they are written to the destination card.

It is possible to select any combination of tracks to be written together - 1, 2 or 3 tracks. Old data on the destination card or formatted tracks will be overwritten if the appropriate checkox of "To be Processed" is selected. The process of writing is performed in two swipes. During the first swipe, MAKStripe USB reads the reference track and during the second swipe the data are written.

Erasing Tracks

If writing to a old card, it is not necessary required to erase any track. During the writing procedure the old data on the destination card is overwritten by the new data. But it is possible to Erase and/or eRase the track you intend to write to, in order to avoid any errors resulting from the previous data and to get a high quality track without distortion. This is performed by selecting the track(s) which shall be erased, using the checkoxes of "To be Processed", pressing the "Erase" or the "eRase" button and swiping the card through MAKStripe USB. The erase procedure will have a duration which is defined in the "Duration" field. Within this time, the card has to be swiped.

"Erase" is erasing the track in the "Flux 0" direction, "eRase" in the "Flux 1" direction.

Development of Own Software for MAKStripe USB

In order to provide the opportunity for development of own software, we are also delivering with MAKStripe USB the library "libmakstripe.a" for Windows NT / 2000 / XP / Vista, for Linux and for Mac OS X with the appropriate header file "makstripe.h".

Using the library "libmakstripe.a", it is possible to integrate and control MAKStripe USB with own code as for example in a application for access control or payment system in a shop and in any other environment, where magneticstripe cards are used and the data should be processed through own software.

The library "libmakstripe.a" gives the opportunity to write your own software for MAKStripe USB using programming language C++. This library provides following methods:

  • int Scan (bool messages=true, int seconds=20); // Scan for Data - Card can be Swiped // true - Diplay MAKStripe Responce // 20 - Wait 20 Seconds for Card to be Swiped
  • bool LoadData (const char* File); // Load Data from *.MAG file (true if Load is OK)
  • bool SaveData (const char* File); // Save Data to *.MAG file (true if Save is OK)
  • string GetCharSet (int i); // Get Characterset for Track i
  • string GetTrackData (int i); // Get Data for Track i
  • int GetNrChars (int i); // Get Nr. of Characters for Track i
  • int GetNrBits (int i); // Get Nr. of Bits for Track i
  • int GetNrTicks (int i); // Get Nr. of Ticks for Track i
  • int GetBPI (int i); // Get BPI for Track i
  • bool GetParity (int i); // Get Parity for Track i (true if paritiy is OK)
  • bool GetLRC (int i); // Get LRC for Track i (true if LRC is OK)

A simple console application, using the library "libmakstripe.a" could look like this example - code:

#include "makstripe.h"
#include <iostream>
using namespace std;

int main(){
  MAKStripe *mP = new MAKStripe;
  // Uncomment following lines if you want to read data from a MAG file
  bool readOK = mP->LoadData ("DEMO.MAG");                 // Load Data from *.MAG file
  if (!readOK){
    cout << "\nError - File could not be opened\n\n";
    exit (0);

  int readOK = mP->Scan (true,20);    // Scan for Data - Card can be Swiped
                                      // true - Print MAKStripe Responce to cout
                                      // 20   - Wait 20 Seconds for a Card to be Swiped.
                                      //        If card has been swiped, then exit
                                      //        immidiately and continue ...      

  if (readOK==1) {
    cout << "\nCard has been read correct.\nFollowing Data are on the Card:";
  else {
    cout << "\nError - exiting programm\n";
    exit (0);
  for (int i=1; i<=3; i++){                                // Print Data for all 3 Tracks
    cout << "\n\nTrack: " << i << "\n";
    cout << "Data   : "      <<  mP->GetTrackData(i)  << "\n";  
    cout << "Charset: "      <<  mP->GetCharSet(i)    << "\n";  
    cout << "Nr. of Chars: " <<  mP->GetNrChars(i)    << "\n";  
    cout << "Nr. of Bits : " <<  mP->GetNrBits(i)     << "\n";  
    cout << "BPI         : " <<  mP->GetBPI(i)        << "\n";  
    cout << "Parity      : " <<  mP->GetParity(i)     << "\n";  
    cout << "LRC         : " <<  mP->GetLRC(i)        << "\n";  

  bool saveOK = mP->SaveData ("DemoNew.MAG");              // Save Data to file DemoNew.MAG



This code can be compiled on linux, with gcc, on Windows with MinGW gcc or on Mac OS X with XCode gcc, using following command:

g++ Example.cpp -L. libmakstripe.a -o Example.exe

If libmakstripe.a and makstripe.h have been copied to folders, where the compiler searches for include files and libraries, also following Makefile could be used:

## Makefile for compilation ##
Example: Example.o 
	g++ -g -o Example Example.o  -lmakstripe 
Example.o: Example.cpp 
	g++ -g -c  Example.cpp 

Starting the console application on Windows, and swiping a card which contains data on tracks one and two, would show the following resuts:

Sample console application, running on Windows

Sample console application, running on Linux

Sample console application, running on MacOS X

Makstripe USBplus - Portable Magneticcard Reader, Writer and Data Logger

MAKStripe USBplus is a further development of our successfull product MAKtripe USB

MAKStripe USBplus

In addition to all of the capabilities of Makstripe USB, described above, Makstripe USBplus is also a portable magneticstripecard logger, capable to save/log up to 20 magneticstripecards and a portable magneticstripecard writer.